如何找到sizeof数组?

时间:2013-08-24 19:25:33

标签: c arrays pointers

如何通过只接收指向数组的指针的函数来查找数组的大小?


    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;
}

2 个答案:

答案 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;
}