【问题】
C语言中,
关于如何获得一个,当做参数传递到函数内的一个数组的大小。
之前以为是可以通过类似于:
|
的,去获得参数中的数组的大小而定。
【解决过程】
1后来经过实际测试,说明自己的想法是错的:
2. 对应的,这里:
How do you get the size of array that is passed into the function?
也讨论到了。
3.相关测试代码:
void func(unsigned char* a) { //void func(unsigned char a[]) { int singleItem = sizeof(a[0]); //int wholeSize = sizeof(a); //4, not 10 int wholeSize = sizeof(*a); //1, not 10 int arrSize = wholeSize/singleItem; } int _tmain(int argc, _TCHAR* argv[]) { unsigned char b[10] = {0}; func(b); return 0; }
【总结】
所以结论是:
1 . 一个数组array,当被当做参数传递到别的函数里面时,别的函数中,是无法获得该数组的大小的;
想要在被调用的函数中,得知原数组的大小,则只能另外添加一个参数,用于指定数组的大小,即,从:
void print_array(int* b) { int sizeof_b = sizeof(b) / sizeof(b[0]); int i; for (i = 0; i < sizeof_b; i++) { printf("%d", b[i]); } }
变成:
void print_array(int* b, int num_elements) { for (int i = 0; i < num_elements; i++) { printf("%d", b[i]); } }
原因:
当一个数组,被当做参数,传递到(别的)被调用的函数中时,
其实只是传递过去一个指针过去。
该指针所指向的地址是,该数组的第一个元素,即someArray[0]
所以,是无法获得对应的数组的整个的大小的。
2. 在当前函数内,则是可以通过类似于:
int arraySize = sizeof(someArray) / sizeof(someArray[0]);
的方式,得到本数组的大小的。
转载请注明:在路上 » 【整理】C语言中如何获得作为函数参数的数组的大小