小言_互联网的博客

C 语言关于函数参数是数组的一个bug

287人阅读  评论(0)

话不多说,先看代码!

#include<stdio.h>
#include<stdlib.h>
int array(int arr[]) {
 int size = sizeof(arr) / sizeof(arr[0]);
 printf("size = %d\n", size);
}
int main() {
 int a[4] = { 1,2,3,4 };
 array(a);
 system("pause");
 return 0;
}

简简单单的代码,判断一下数组长度,猜猜看?如果你觉的结果是4,那你就错了。结果如下

结果是 1,惊不惊喜。原因是,在 C 语言中,如果函数的参数是一个数组,那么这个数组会隐式的转换为指针,返回去,你在想想,一个数组的指针的大小是几个字节呢?int 型,4个字节,然后除以一个数组元素的大小,刚好结果是一。接下来,我改变一下代码。

#include<stdio.h>
#include<stdlib.h>

int array(int arr[],int size) {
	int x = size;
	printf("size = %d\n", x);
}
int main() {
	int a[4] = { 1,2,3,4 };
	array(a, sizeof(a) / sizeof(a[0]));
	system("pause");
	return 0;
}

我在函数的外边就计算了数组的长度,然后当作一个参数传进函数,这一次结果就对了!

所以说,把数组当作参数传进函数,数组会隐式的变为指针!

 


转载:https://blog.csdn.net/qq_43747991/article/details/101938537
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场