嵌入式面试经典问题(使用C语言实现不定长数组)

🧱 方法 1:结构体 + 指针 + realloc(最常见)

✅ 实现思路:

使用结构体封装数组指针、容量、当前长度,扩容时用 realloc

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int *data;
    size_t size;     // 当前元素数
    size_t capacity; // 当前容量
} DynArray;

void initArray(DynArray *arr, size_t initCapacity) {
    arr->data = malloc(initCapacity * sizeof(int));
    arr->size = 0;
    arr->capacity = initCapacity;
}

void pushBack(DynArray *arr, int value) {
    if (arr->size >= arr->capacity) {
        size_t newCap = arr->capacity * 2;
        int *newData = realloc(arr->data, newCap * sizeof(int));
        if (!newData) {
            perror("realloc failed");
            exit(1);
        }
        arr->data = newData;
        arr->capacity = newCap;
    }
    arr->data[arr->size++] = value;
}

void freeArray(DynArray *arr) {
    free(arr->data);
    arr->data = NULL;
    arr->size = arr->capacity = 0;
}

🧱 方法 2:柔性数组(C99)

✅ 实现思路:

结构体最后一个成员为未定长数组 int data[],分配整块内存。

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    size_t size;
    size_t capacity;
    int data[]; 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务