【问题】
C语言中,
关于如何获得一个,当做参数传递到函数内的一个数组的大小。
之前以为是可以通过类似于:sizeof(b) / sizeof(b[0])
的,去获得参数中的数组的大小而定。
【解决过程】
1后来经过实际测试,说明自己的想法是错的:
2. 对应的,这里:
也讨论到了。
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]);
的方式,得到本数组的大小的。