MST

星途 面试题库

面试题:C语言数组定义的高级难度问题

定义一个可变长度数组(VLA),其大小由用户在运行时输入决定。该数组用于存储用户输入的整数,然后编写函数对这个数组进行排序(可使用任何你熟悉的排序算法),并在主函数中调用该函数进行演示。说明可变长度数组在C语言中的特点和注意事项。
40.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int n;
    printf("请输入数组的大小: ");
    scanf("%d", &n);

    // 定义可变长度数组
    int arr[n];

    printf("请输入 %d 个整数:\n", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    bubbleSort(arr, n);

    printf("排序后的数组: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

可变长度数组在C语言中的特点和注意事项:

  • 特点
    • 灵活性:其大小可在运行时确定,而不像普通数组需在编译时确定大小,这为处理大小不确定的数据提供了便利。例如在读取未知数量的用户输入数据时非常有用。
    • 栈上分配:VLA是在栈上分配内存,相比于堆内存分配(如malloc),栈分配和释放的速度通常更快。
  • 注意事项
    • 并非标准C89支持:VLA是C99标准引入的特性,部分老旧编译器可能不支持,若使用较旧编译器,需注意兼容性。
    • 作用域限制:VLA的作用域与普通局部变量类似,在定义它的块结束时,其占用的栈空间会自动释放。
    • 内存限制:由于在栈上分配,栈空间通常有限,如果定义的VLA过大,可能导致栈溢出错误,程序崩溃。