话不多说,先看代码!
#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
查看评论