0

如何通过仅接收指向数组的指针的函数找到数组的大小?


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

2 回答 2

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;
}
于 2013-08-24T19:53:56.557 回答
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;
}
于 2013-08-24T19:36:50.517 回答