c语言 函数输入数组大小,【整理】C语言中如何获得作为函数参数的数组的大小...

【问题】

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]);

的方式,得到本数组的大小的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值