考点拆分 02 · 数组 · 字符串 · 指针(约 35 分)
来源:2024 回忆版
系统笔记:1.6 数组 1.8 指针 2.4 串、数组和广义表
必背清单
- [ ] 下标从 0;
int a[5]合法a[0]..a[4] - [ ] 二维数组 行优先 存储
- [ ]
strlen不含'\0';sizeof("abcd")=5 - [ ]
strcmp等在string.h - [ ] 指针作输出:
*z = x + y - [ ]
strcpy返回目标地址,可嵌套strlen(strcpy(...))
2024 真题回放
| 位置 | 答案 | 考点 |
|---|---|---|
| 单选 2 | A | strcmp → string.h |
| 单选 14 | D | "abcd" 长度 4 |
| 判断 2 | × | 下标从 0 |
| 判断 7 | √ | 行优先 |
| 判断 8 | √ | 串是字符线性表 |
| 填空 1 | *z = x + y | 指针输出参数 |
| 填空 2 | 2 | strcpy 后 strlen("Hi") |
| 填空 3 | 顺序/链式 | 串存储 |
| 计算 3 | 7 / abdefgh | 过滤字符 |
| 应用 1 | 3×3 矩阵 | 二维按行赋值 |
| 应用 2 | 最高分 | 一维找 max |
手撕模板
指针返回两数和
c
void add(int x, int y, int *z) {
*z = x + y;
}过滤字符
c
// 把 s 中 != ch 的拷到 t
int j = 0;
for (int i = 0; s[i]; i++)
if (s[i] != ch) t[j++] = s[i];
t[j] = '\0';二维按行填数
c
int num = start;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
a[i][j] = num++;同型自测
char s[]="abc"; printf("%d %d", strlen(s), sizeof(s));int a[2][3]={{1,2,3},{4,5,6}}; printf("%d", *(*(a+1)+1));- 写出:输入 n 个数,输出最小值(n≤100)
答案
3 45(第 2 行第 2 列)- 先读 n,再循环读并维护 min
返回:_索引 · 全卷