我尝试过很多次搜索这个问题。静态数组通常存储在堆栈中,它们的大小在编译时确定。
例如:
int main()
{
int n;
scanf("%d", &n);
int array[n];
printf("%u", sizeof(array));
return 0;
}
数组的大小因n的不同而变化。因此,数组应该在运行时以堆的形式存储,这样会更好吧?我对此感到困惑。请帮忙解答。谢谢!
gcc
长期支持可变长度数组(VLA) - 我想它们开始于1999年VLAs成为标准之前。GNU编译器还将VLAs作为C ++的扩展支持,因为它们不是标准。 - Sergey Kalinichenko查看标准对这个特殊情况的说明:
sizeof
运算符返回其操作数的大小(以字节为单位),其操作数可以是表达式或类型名称加括号。大小由操作数的类型确定。结果是一个整数。如果操作数的类型是可变长度数组类型,则会计算操作数;否则,不会计算操作数,结果是一个整数常量。
%u
不是正确的格式说明符。请使用%zu
。 - Spikatrixalloca(3)
(它的使用也不被赞同)来表示它是一个动态大小的堆栈变量。请参见:https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html - holgac