综合练习
实现动态数组 + Makefile。
40 分钟
综合练习
把类型、指针、结构体、构建与测试串起来,实现一个可增长的动态数组(类似 Java ArrayList 的 C 版)。对照 /roadmaps/c 完成本 track 闭环。
学习目标
- 实现带
push、get、free的动态IntVector - 用 Makefile 组织多文件编译
- 编写至少 3 个测试用例
- 规划 C 进阶学习路径
核心概念
项目需求
IntVector:data指针、size、capacityintvec_push(v, value):必要时realloc扩容(倍增策略)intvec_get(v, index):越界返回错误码intvec_free(v):释放内存,防止泄漏- Makefile 构建;可选 cmocka / 简单
main测试
目录与实现提示
intvector/
Makefile
intvector.h
intvector.c
main.c
test_main.c # 可选
/* intvector.h */
#ifndef INTVECTOR_H
#define INTVECTOR_H
#include <stddef.h>
typedef struct {
int *data;
size_t size;
size_t capacity;
} IntVector;
int intvec_init(IntVector *v);
int intvec_push(IntVector *v, int value);
int intvec_get(const IntVector *v, size_t index, int *out);
void intvec_free(IntVector *v);
#endif
/* intvector.c 核心片段 */
#include "intvector.h"
#include <stdlib.h>
int intvec_push(IntVector *v, int value) {
if (v->size >= v->capacity) {
size_t new_cap = v->capacity ? v->capacity * 2 : 4;
int *p = realloc(v->data, new_cap * sizeof(int));
if (!p) return -1;
v->data = p;
v->capacity = new_cap;
}
v->data[v->size++] = value;
return 0;
}
/* main.c */
#include <stdio.h>
#include "intvector.h"
int main(void) {
IntVector v;
intvec_init(&v);
for (int i = 0; i < 10; i++) intvec_push(&v, i * i);
int val;
intvec_get(&v, 5, &val);
printf("v[5]=%d size=%zu\n", val, v.size);
intvec_free(&v);
return 0;
}
进阶路线
| 方向 | 建议 |
|---|---|
| 系统编程 | Linux 系统调用、操作系统课程 |
| 嵌入式 | 单片机、RTOS |
| 进阶语言 |