C语言数组做函数参数的退化问题
程序员文章站
2023-12-31 14:57:34
...
C语言数组做函数参数的退化问题
上代码再解释
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#define calculateSize(a) sizeof(a)/sizeof(*a)
void myArray(int Array[])
{
int b;
b = calculateSize(Array);
printf("b = %d\n", b);
}
int main()
{
int a = 0;
int array[] = {1,2,3,4,5,6};
a = calculateSize(array);
printf("a = %d\n", a);
myArray(array);
system("pause");
return 0;
}
运行结果是
a = 6
b = 2
原因:
在主函数上能正确计算出数组元素的个数,而通过调用函数却不能。原因在于数组做函数参数会退化为指针。在myArray函数中计算时,sizeof(array) = 8(64位系统指针变量占8字节,32位系统则为4字节),sizeof(*array) = 4,*array为整形变量,所以为4字节,所以结果b = 2.