如何通过仅接收指向数组的指针的函数找到数组的大小?
int find(int *p)
{
// I want to find the sizeof
// the array in this function
return 1;
}
int main()
{
int a[]={12,2,9,6,5,11,15};
find(a);
return 0;
}
如果您只是传递一个没有大小信息的指针,find
那么您必须使用类似C
char*
字符串习语之类的东西并具有特殊的数据结束值。 C
的字符串习语使用null
字符 ( \0
) 标记数据结束。 C
的标准字符串长度函数 ( strlen
) 也不将此null
字符包括在字符串大小的计数中。看起来上面的代码可能-1
用于标记数据的结尾。如果您从不对数据使用负值,这将起作用。如果是这种情况,那么您可以像这样计算数组的大小:
size_t length_of_array(int *p) {
size_t len = 0;
while( *(p + len) > 0 )
++len;
return len;
}
除非你传递数组的大小,否则你不能这样做。如果在您的情况下,-1 是标记列表末尾的哨兵,您可以使用它:
#include <stdio.h>
int find(int *p)
{
int * q = p;
while(*q != -1)
++q;
return q-p;
}
int main()
{
int a[]={12,2,9,6,5,11,-1};
printf("%d", find(a));
return 0;
}