C 语言中的变长数组

或许这是很多 C 程序员都不知到的特性:C 语言中可以定义变长数组。也就是说,定义数组时,数组的长度可以是变量,而不一定非要是常量。比如:

    int len = 100;
    char str[len];

这个特性无疑是非常有用的。比如在不知到数组的长度时,要么定义一个足够大的数组,要么使用内存分配函数如 malloc 函数获取适当大小的内存,但需要记得 free. 使用变长数组,使得这个过程变得优雅和简化。

这个特性是在 C99 中加入 C 的标准中的,事实上,GNU C 在之前已经支持这种写法了。vc 对 C99 的支持一直不怎么热心,所以 VC 中并不支持这种写法。所以如果代码又跨平台的需求,最好不要使用变长数组,并且最好只使用 C89 的特征。

需要注意的是,变长数组只能是局部变量,不能是静态变量和全局变量,因为这两者的长度是编译时决定的,而变长数组的长度要到运行时才能确定。变长数组是局部变量,所以是有生命周期的,其生命周期仅在当前域内,即 {} 内。

变长数组使用的内存是栈内存,所以需要注意数组长度不能太大超过栈内存大小限制。linux 上可以用 ulimit -s 查看栈大小,一般为 8M.

C 语言中的变长数组》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注