【发布时间】:2021-12-20 09:17:05
【问题描述】:
我对 C99 标准中的数组声明有一些疑问。
int n;
scanf("%d", &n);
int v[n];
这会创建一个大小不同的数组吗?我知道它可以是常量或常量变量。但我认为它必须在编译时具有已知值,并且大小不应改变。
但是我多次看到上面提到的语法,我不知道这是一个防御错误。
第二个问题与传递给函数的数组有关。
void printing(int v[])
和
void printing(int *v)
这两种声明有区别吗?
【问题讨论】:
-
int v[n];是一个可变长度数组。这是一个 c99 功能,之后成为可选功能。一些编译器,尤其是 Microsoft,不支持 VLA,因为它不完全符合 c99。 VLA 大小在运行时确定,并且可以在每次定义时更改(例如在函数中)。