C语言数组[ ]里可以放变量?

在C语言中,数组定义时可以使用变量来指定数组的大小,这种特性称为变长数组(Variable Length Array,VLA)。传统的C语言数组大小通常是在编译时确定的,而VLA允许在运行时动态确定数组的大小。

使用变长数组的情况:

  1. 定义数组大小

    c
    int n = 10; // 变量n用来表示数组的大小 int arr[n]; // 声明一个大小为n的数组,n是一个变量

    这里的 n 可以是任何合法的整数表达式,它在运行时计算得出,并决定了数组的大小。

  2. 函数参数中的使用: 变长数组可以作为函数参数,大小可以在调用函数时确定:

    c
    void processArray(int size, int arr[size]) { // 函数体内使用arr数组,size为数组的大小 }

    调用该函数时,可以传递变量作为数组大小参数。

注意事项:

  • 作用域:变长数组的作用域与普通局部数组相同,限于定义它的块(block)内部。

  • 初始化:变长数组可以像普通数组一样初始化,但要确保在定义时已经确定了数组的大小。

  • 内存分配:变长数组的内存分配由编译器在运行时处理,因此可能影响程序的性能和内存使用。

示例代码:

c
#include <stdio.h> void printArray(int size, int arr[size]) { for (int i = 0; i < size; ++i) { printf("%d ", arr[i]); } printf("\n"); } int main() { int n = 5; int arr[n]; // 声明一个大小为n的数组 // 初始化数组 for (int i = 0; i < n; ++i) { arr[i] = i + 1; } // 调用函数打印数组 printArray(n, arr); return 0; }

上述代码演示了如何使用变长数组以及如何将变量作为数组大小的参数传递给函数。变长数组在C99标准中被引入,并得到了广泛支持,在适当的情况下可以方便地处理动态大小的数组需求。