C-为什么这样的程序可以静态分配内存?

发布于 2017-01-24 06:08:57 字数 222 浏览 1168 评论 2

int main(int argn, char** argv)
{
int a;
scanf("%d",&a);
int b[a];

printf("size of array = %dn", sizeof(b));

return 1;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-10-22 18:05:33

这个是c99中新加的, 这篇帖子有详细介绍: http://topic.csdn.net/t/20061019/10/5093368.html

归属感 2017-08-22 19:18:55

Variable Length Arrays are not approved by C++ standard. C++ Standard mandates that the size of an array must be an compile time constant.

Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C89 mode and in C++. (However, GCC’s implementation of variable-length arrays does not yet conform in detail to the ISO C99 standard.) These arrays are declared like any other automatic arrays, but with a length that is not a constant expression. The storage is allocated at the point of declaration and deallocated when the brace-level is exited.
另外,VLA 需要支持 sizeof 运算, 动态sizeof 也是C99的一个特有特性。
目前很多C++编译器尚不能支持动态数组特性(VC++2005不支持此特性, GCC3.2之后支持)
关于VLA,需要注意一下几点:
1. VLA的空间是函数栈中是一个automatic,在声明处分配,在作用域结束处释放。
2. VLA不能位于在静态存储区(包括全局变量和静态变量)中,也就是说不能添加static修饰或在任何函数体外定义

参考链接:
C语言变长数组之剖析
GCC变长数组VLA (allowed in ISO C99)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文