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.。。。
|