【发布时间】:2021-10-29 16:45:59
【问题描述】:
当我尝试查找 sizeof(A) 时,其中 A 是 int 类型,大小为“n”,n 是一个未定义的 int。我得到一个 496 的输出,当我给 n 一个值然后检查它时,sizeof(A) 给了我相同的值 496。 我知道 Array 是一种静态数据类型,因此无论“n”如何,它都会有内存,但谁能解释一下值 496 的来源?
int main()
{
int n;
int A[n];
cout<<sizeof(A)<<"\n";
cin>>n;
cout<<sizeof(A);
return 0;
}
【问题讨论】:
-
这不是有效的 C++。
n不仅从未初始化,它也不是编译时间常数。虽然一些编译器支持可变长度数组,但标准不支持。另请注意:A没有类型int。它的类型为int[n] -
两个sizeof函数的输出都是496。
-
n的值在您使用它时是未指定的,因此您的程序的行为是未定义的。此外,可变长度数组不是 C++ 的标准部分,即使可用,通常也不应使用它们。 -
未定义的行为是未定义的。 496 与任何其他结果、无结果、崩溃或您的计算机着火的可能性一样。
-
@alfC - 我不太关心编译器,因为有许多 C++ 编译器支持 VLA 作为非标准扩展(不支持任何非标准扩展的编译器是像母鸡的牙齿一样稀有)。我更担心老师告诉学生尝试它的事实 - 以暗示它是正确的方式,当它不是时。我对提供信息的老师没有意见(虽然这是非标准的,但您会发现一些 C++ 编译器支持 VLA),但对提供“试试看,它有效”建议的老师确实有意见。
标签: c++ sizeof variable-length-array gcc-extensions