欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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.

相关标签: C语言

上一篇:

下一篇: