使用用户输入元素声明数组

时间:2014-03-27 14:54:53

标签: c arrays

在C中,当我声明一个n元素a[n]数组,并且用户输入n时,它不应该工作,因为数组空间会改变从静态内存到动态内存。

但它有效!为什么?

标准是否已更新或是什么?

3 个答案:

答案 0 :(得分:1)

  

但它有效!为什么?

因为C99引入了variable length arrays。你可以声明动态数组。

6.7.6.2数组声明符:

  

如果大小是整数常量表达式   并且元素类型具有已知的常量大小,数组类型不是可变长度   数组类型;否则,数组类型是可变长度数组类型。

答案 1 :(得分:1)

Variable length arrays VLA )是 C99 功能,因此您使用的编译器支持VLA或在 C99之外支持它 mode作为扩展名,例如gccclang

另一方面, C ++ 标准不支持VLA,但是包括上面列出的那些编译器在内的许多编译器都支持C ++中的VLA作为扩展。

我们可以看到它们已添加到 C99 中,只需转到Foreword部分中的草案C99标准:

  

[...]上一版的主要变化包括:

并包含以下项目符号:

  

- 可变长度数组

答案 2 :(得分:1)

C99标准允许使用可变长度数组,这正是您所描述的行为。

编辑:C99不受普遍支持(至少默认情况下)。但是,许多编译器(例如GCC)已将C99标准的子集合并到其默认编译设置中。

如果您想禁用这些功能,可以在GCC中通过在编辑设置中设置-ansi -pedantic来实现。这可确保ANSI C中不支持的任何内容都会产生错误。