这个问题是关于声明int数组的后续问题。
考虑下面的程序:
考虑下面的程序:
#include <iostream>
#include <string>
int main()
{
int x[10];
std::cout << sizeof(x) << std::endl;
int * y = new int [10];
std::cout << sizeof(y) << std::endl;
//delete [] y;
}
sizeof(x)
输出40(总大小),sizeof(y)
输出8(指针大小)。
对我来说,这很有趣。在我的看法中,int x[10]
和y
没有任何区别,除了它在栈中的位置不同外。那么c++实际上是从哪里存储x
的大小呢?它是从栈中获取的吗?或者固定大小的数组在内部被视为具有大小的结构体?
std::array<int,10>
。 - user0042x
的完整类型,其中包括数组的大小。y
只是一个指针(不是数组),所以编译器只知道它的这些信息。另外需要注意的是:sizeof
在编译时而不是运行时被评估。 - Richard Crittenstd::array
也不存储大小。至少我希望实现不会这样做。 - chrisint[10]
和int[8]
是不同的类型。编译器知道这些信息,因此可以获取它们的大小。 - NathanOliver