C程序填空(选填)
大约 4 分钟
C程序填空(选填)
何时看本篇:下午「程序填空」若卷面为 C(与 Java 二选一或分卷,以当年题本为准),再用本篇。当前复习主线为 Java 时,优先 Java程序填空。
快拿分:指针移动与
NULL、字符串'\0'、递归 出口、链表 前驱指针——空位常在 while 条件、赋值顺序、return;写完 手推小样。
一、知识与应试(考点·难点·知识点合一)
1.1 指针与数组
a[i]即*(a+i);二维数组形参int a[][M]或int (*a)[M]。*p++:先取*p,再移动p;与(*p)++区分。const:const char *p所指内容不可改;char * const p指针本身不可改。
1.2 字符串与内存
strlen不含'\0';strcpy目标区要够大。malloc配对free;检查NULL再使用。
1.3 递归与链表
- 递归:基准 + 向基准前进;参数传值不改实参,需回传用指针。
- 链表插入删除:先连后断,保存前驱;快慢指针(环、中点)。
1.4 与算法结合
- 快排
partition、归并merge、二分mid = lo + (hi-lo)/2防溢出。 - 〔易错〕:循环里修改头结点要返回新
head。
二、速记与背诵
- 三交换:
t=a; a=b; b=t; - 链表插入:
s->next = p->next; p->next = s; - 递归先写出口:
if (!p) return ...