☰
《C语言总复习(第二章):10大核心高频考点,吃透稳拿基础分》
2026/10/5 10:15:05 网站建设 项目流程

C语言总复习:高频难点+必背考点(附可直接运行代码)

目录(点击跳转)

  • 一、数据类型与 signed/unsigned(必考坑点)
  • 二、sizeof 核心考点(90%概率考)
  • 三、变量:局部 vs 全局(内存+优先级)
  • 四、算术运算符:整除、取模(高频错题)
  • 五、++/-- 前置 vs 后置(必考)
  • 六、强制类型转换(隐式+显式)
  • 七、printf 格式化(输出格式必背)
  • 八、scanf 重难点(90%人错)
  • 九、僵尸进程 & 孤儿进程(操作系统高频)
  • 十、考场/面试秒杀口诀

一、数据类型与 signed/unsigned

1. char 默认有符号还是无符号?

  • char不等于signed char,是否带符号由编译器决定。
  • int默认等价于signed int。
#include<stdio.h>intmain(){chara=0x80;if(a<0)printf("char 是有符号\n");elseprintf("char 是无符号\n");return0;}

2. 无符号数永远 ≥ 0,比较极易踩坑

无符号数运算结果一定是无符号,不会出现负数。

#include<stdio.h>intmain(){unsignedinta=10;if(a-20>0){printf("成立!无符号数永不为负\n");}return0;}

二、sizeof 核心考点

1. sizeof 是运算符,不是函数

2. sizeof不执行表达式,只看类型

#include<stdio.h>intmain(){shorts=2;intb=10;printf("%zd\n",sizeof(s=b+1));// 结果:2printf("s=%d\n",s);// s 仍为 2,表达式未执行return0;}

3. 常见类型大小(64位环境)

类型32位环境64位环境
char11
short22
int44
long44/8
long long88
float44
double88
指针(void*)48

三、变量:局部 vs 全局(内存+优先级)

1. 同名变量,局部优先于全局

#include<stdio.h>intn=1000;// 全局变量intmain(){intn=10;// 局部变量printf("%d\n",n);// 输出:10return0;}

2. 内存分布

  • 局部变量 →栈区
  • 全局/静态变量 →静态区
  • 动态分配(malloc)→堆区

四、算术运算符:整除、取模(高频错题)

1. 整数除法是整除,直接丢弃小数

#include<stdio.h>intmain(){intscore=5;// 错误:整数整除,结果为0score=(score/20)*100;printf("错误结果:%d\n",score);// 正确:转为浮点数除法score=(score/20.0)*100;printf("正确结果:%d\n",score);return0;}

2. % 取模:结果符号由被除数决定

11 % 5 = 1 11 % -5 = 1 -11 % 5 = -1 -11 %-5 = -1

五、++/-- 前置 vs 后置(必考)

口诀:

  • 前置++:先+1,再使用
  • 后置++:先使用,再+1
#include<stdio.h>intmain(){// 前置++inta=10,b;b=++a;printf("前置:a=%d, b=%d\n",a,b);// a=11, b=11// 后置++intx=10,y;y=x++;printf("后置:x=%d, y=%d\n",x,y);// x=11, y=10return0;}

六、强制类型转换(隐式+显式)

  • 隐式转换:编译器自动转,易丢精度、有警告
  • 显式强转:(类型)值,无警告,截断而非四舍五入
#include<stdio.h>intmain(){inta=3.14;// 隐式转换,警告intb=(int)3.14;// 显式强转,无警告printf("a=%d, b=%d\n",a,b);// 均为3return0;}

七、printf 格式化(输出格式必背)

#include<stdio.h>intmain(){intnum=123;doublef=123.45;printf("%5d\n",num);// 宽度5,右对齐: 123printf("%-5d\n",num);// 左对齐:123printf("%+d\n",num);// 显示正负号:+123printf("%.2f\n",f);// 保留2位小数:123.45printf("%6.2f\n",f);// 总宽6,小数2位:123.45printf("%%\n");// 输出%return0;}

八、scanf 重难点(90%人错)

1. 普通变量必须加 &(数组名/指针除外)

2. %c 会读取空格/换行,前面加空格跳过空白

3. %*c:赋值忽略符,跳过任意分隔符

4. 返回值:成功读取的变量个数

#include<stdio.h>intmain(){inta,b,y,m,d;charch;// 1. 普通变量取地址scanf("%d %d",&a,&b);// 2. %c 跳过空白scanf(" %c",&ch);// 3. 忽略分隔符(支持2025-01-01或2025/01/01)scanf("%d%*c%d%*c%d",&y,&m,&d);// 4. 返回值intr=scanf("%d",&a);printf("r=%d\n",r);// 成功1个返回1,失败返回0,结束返回-1return0;}

九、僵尸进程 & 孤儿进程(操作系统高频)

1. 僵尸进程

  • 条件:子进程先死,父进程存活,父未调用 wait/waitpid
  • 特点:残留PCB,占用进程号,不释放资源
  • 核心:父进程等待子进程回收

2. 孤儿进程

  • 条件:父进程先死,子进程存活
  • 特点:被init(PID=1)收养,自动回收,不会变僵尸

十、考场/面试秒杀口诀

  1. char 有符号看编译器,int 默认有符号
  2. 无符号数运算永不为负
  3. sizeof 不算表达式,只看类型
  4. 局部变量优先全局变量
  5. 整数除法是整除,想算小数用浮点数
  6. 取模符号看被除数
  7. 前置++先加后用,后置++先用后加
  8. scanf 变量要&,%c前面加空格跳空白
  9. 强转是截断,不是四舍五入
  10. 僵尸:子死父不收;孤儿:父死子被收养

要不要我再帮你生成一份配套的可直接复制的Markdown目录,方便你放在文章开头快速跳转?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询