C99下是否合法: void func(int var){int arr[var];}
时间: 2023-12-13 08:02:32 浏览: 57
在C99标准下,可以使用形参来定义数组的长度,因此`void func(int var){int arr[var];}`是合法的代码。
这种定义数组长度的方式也属于变长数组(Variable Length Array, VLA)。在函数调用时,实参的值会传递给形参`var`,然后编译器会根据形参`var`的值来确定数组`arr`的长度。需要注意的是,VLA只能定义在函数内部,不能定义在函数外部或作为全局变量。
需要注意的是,C11标准已经将VLA从标准中删除了,因此在C11及其之后的标准中,将不能使用VLA。
相关问题
C99下是否合法:int var=10;int arry[var]
在C99标准下,可以使用变量来定义数组的长度。因此,`int var=10; int arry[var];`是合法的代码。
这种定义数组长度的方式称为变长数组(Variable Length Array, VLA)。在编译时,编译器会根据变量`var`的值来确定数组`arry`的长度。需要注意的是,VLA只能定义在函数内部,不能定义在函数外部或作为全局变量。
需要注意的是,C11标准已经将VLA从标准中删除了,因此在C11及其之后的标准中,将不能使用VLA。
c语言定义一个动态大小的二维数组,不允许c99修改下列代码:int** arrays; *arrays = (int*)malloc(factorial(mustPass_num) * sizeof(int)); **arrays = (int*)malloc(mustPass_num * sizeof(mustPass[0]));
这段代码是错误的,因为arrays是一个指向指针的指针,而没有为其分配内存空间。正确的动态分配二维数组的方法如下:
```c
int** arrays;
arrays = (int**)malloc(mustPass_num * sizeof(int*));
for (int i = 0; i < mustPass_num; i++) {
arrays[i] = (int*)malloc(factorial(mustPass_num) * sizeof(int));
}
```
这里首先分配了一个指向指针的指针 `arrays`,然后为每一个指针分配内存空间,形成二维数组。注意,为了能够访问到每一行的数据,要在外层使用一个循环来为每一行分配内存空间。
阅读全文