为什么数组传入函数后空间大小会变?

来源:1-1 2020重C++ 课程导学

慕少7291608

2022-06-26

#include <iostream>
using namespace std;
int checksize(int arr[]) {
	return sizeof(arr);
}
int main() {
	int arr1[] = { 34,55,1,10,7 };
	int size = checksize(arr1);
	cout << "数组的空间大小为:" << sizeof(arr1) << endl;
	cout << "函数里的数组的空间大小为:" << size << endl;
}

图片描述
为什么在checksize函数中,用sizeof函数查看数组大小得到的结果与数组在main函数中的结果是不同的?
一个是20,一个是8
int 占4个空间大小,5个元素,理应是20,请问为什么传入checksize函数后空间大小会变?如果想要让checksize函数中sizeof查看数组空间大小的结果也是20,有什么解决办法

写回答

1回答

quickzhao

2022-06-26

作为数组时计算其长度当然是sizeof(int)*数组尺寸,这里是20;在C中当数组名作为参数传递时会出现退化情况,这是出于对效率的考虑,只传递一个数组的首地址,也就是指针,所以在函数内得到的尺寸,你应该是64位编译的,所以地址是8字节,如果是32位,应该是4字节。

0
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程