
1 ritksm 2013-11-15 17:47:32 +08:00 C99标准引入的- -老早的事情了... |
2 lotem 2013-11-15 17:48:43 +08:00 c99 variable-length arrays |
3 txx 2013-11-15 17:52:15 +08:00 很早的事情了 就是编译的时候丢栈顶....不推荐的做法... |
4 xieranmaya OP @ritksm 啊,真是这样吗,尼马我上大学时都07年了老师也没告诉我可以这么写啊啊啊啊 |
5 txx 2013-11-15 17:53:36 +08:00 发现楼主是 大山中学的? |
6 xieranmaya OP |
7 xieranmaya OP @txx 不是我,是我妹子 |
8 skydiver 2013-11-15 18:02:10 +08:00 @xieranmaya malloc是堆上分配的空间吧。应该不一样 |
9 txx 2013-11-15 18:03:45 +08:00 不不不不不 它实际上还是使用的栈空间而不是堆空间...malloc 走的是堆空间.. 他编译的时候 就把这个变量丢到栈顶.. 然后根据n是多少 划掉相应的空间 如果n过大直接 stackoverflow 而且对于一般程序而言 栈空间远远小于堆空间的 所以不推荐这个做法 http://stackoverflow.com/questions/448844/variable-sized-arrays-in-c |
10 xieranmaya OP @txx 高手哇~~解惑了~~ |
11 xdeng 2013-11-15 18:10:27 +08:00 malloc 和 new malloc 只管分配内存 |
12 xdeng 2013-11-15 18:11:48 +08:00 不小心 按回车了 new 不单只分配内存 如果是对象还会调用 构造函数 而 malloc一个对象 不会。。。同理 delect 和 free 也不一样。。。 |
13 xieranmaya OP @xdeng 嗯嗯,new 和 malloc 是有区别的~ |
14 Golevka 2013-11-15 18:53:46 +08:00 C99有VLA, C++14才把VLA正式纳入标准, 但是许多支持C++11的编译器都支持VLA作为自己的扩展特性. |
15 Ricepig 2013-11-16 01:20:08 +08:00 via iPhone lz大学还在用turbo c吗?哈哈 |
16 Ricepig 2013-11-16 01:21:04 +08:00 via iPhone 另外,小心stack overflow,这不是那个网站哦 |
17 treo 2013-11-16 17:39:49 +08:00 ms的vs至今不支持vla |
18 guchy2012 2013-11-16 20:29:19 +08:00 C++里面把n设置为常量就可以这么用,而且是编译器行为。 |
19 xieranmaya OP @Ricepig 当年上大学的时候用的是VC6.0.。。。 |