【发布时间】:2021-09-07 15:39:20
【问题描述】:
请原谅我这个可能很愚蠢的问题。考虑一下:
int foo(int* arr) {
std::cout << arr << "(" << sizeof(arr) << ")";
}
int main()
{
int x[] = {0, 1, 2, 3, 4};
foo(x);
std::cout << " " << x << "(" << sizeof(x) << ")";
}
Output: 0x7c43ee9b1450(8) 0x7c43ee9b1450(20) - 地址相同,大小不同。
我的理解是函数参数是特定于数组第一个元素的地址,所以大小为8字节,main中的变量也应该如此;那么函数外部变量的大小怎么代表整个数组(4 字节 int times 5 个元素 = 20)?我怎么可能从函数内部确定一个数组实际上有多大?
【问题讨论】:
-
里面
main,sizeof(x)是数组的大小;在他的其他函数中,sizeof(arr)是指针的大小。 -
arr是一个指向数组第一项的指针,所以你得到一个指针的大小。x是一个数组,所以你得到一个数组的大小(一个项目的大小乘以数组中的项目数)。 -
int[5]类型的数组很容易衰减为int*类型。这就是你在这里看到的。 -
"相同地址,不同大小" ...想象一下激光笔指向飞机与指向飞机飞行员——地址相同,大小不同 :-)
标签: c++