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