难道在栈上也可以动态开辟数组了

2014-08-02 13:29:32   最后更新: 2014-08-02 13:29:32   访问数量:1350




难道在栈上也可以动态开辟数组了

/* * file: main.c * author: 龙泉居士 * date: 2012-11-20 06:12 */ #include <stdio.h> int main () { int n; scanf ("%d", &n); int a[n], i; for (i=0; i!=n; ++i) { int x; scanf ("%d", &x); a[i] = x; } for (i=0; i!=n; ++i) printf ("%d ", a[i]); printf ("\n"); return 0; }

 

无聊中写了一个程序居然编译通过运行正常,这这这。。。什么状况。。。整个三观都颠覆了,这样的程序不应该可以编译通过啊,难道在栈上也可以动态开辟数组?

 

Variable-length array,在这里有叙述:

For example, the GNU C Compiler allocates memory for VLAs on the stack.

 

另外,GNU C提供了 alloca 函数,用来动态的在栈空间上开辟空间,可以参看unix的存储器分配

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 






技术帖      linux      unix      技术分享      遗留问题      堆栈      已解决     


京ICP备15018585号