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;
}
答案 0 :(得分:2)
除非你传递数组的大小,否则你无法做到。如果,在您的情况下,-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;
}
答案 1 :(得分:2)
如果您只是将没有大小信息的指针传递给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;
}