⼀、C 语⾔基础概述1.1 C 语⾔特点•结构化、模块化编程语⾔兼具⾼级语⾔与低级语⾔特性执⾏效率⾼可移植性强是系统编程、嵌⼊式开发的核⼼语⾔。•程序结构由⼀个主函数 main ()和若⼲⾃定义函数组成程序从main()开始执⾏到main() 结束。1.2 基本语法规则1.语句以分号;结尾分号是语句结束的标志。2.注释单⾏注释//注释内容 多⾏注释/*注释内容*/多⾏注释不可嵌套。3.标识符由字⺟、数字、下划线组成⾸字符不能是数字区分⼤⼩写不能使⽤关键字如int、if、for 等。4.关键字C 语⾔预留的 32 个关键字具有固定语法含义不可⾃定义使⽤。1.3 数据类型1.3.2 类型修饰符•signed有符号默认、unsigned⽆符号仅修饰整型、字符型扩⼤正数范围。•例 unsigned int a;取值范围 0~2³²-1。1.3.3 常量与变量•常量程序运⾏中值不变的量分为整型常量、浮点常量、字符常量单引号 a、字符串常量双引号abc、符号常量#define PI 3.14。•变量先定义、后使⽤定义格式 数据类型 变量名;例int a; float b;。⼆、运算符与表达式2.1 运算符分类1.算术运算符、-、*、/、%取余仅适⽤于整型、⾃增、--⾃减◦前置 /--先运算后赋值后置 /--先赋值后运算。◦例int a5,b; ba;→ b5a6ba;→ b6a6。2.赋值运算符、、-、*、/、%◦复合赋值a3等价于aa3。3.关系运算符、等于、!不等于结果为真1或假0。4.逻辑运算符逻辑与、||逻辑或、!逻辑⾮◦短路特性 左侧为假右侧不运算|| 左侧为真右侧不运算。5.位运算符按位与、|按位或、^按位异或、~按位取 左移、右移◦左移⾼位丢弃低位补 0等价于乘 2右移正数⾼位补 0负数⾼位补 1等价于除 2。6.条件运算符 表达式1?表达式2:表达式3三⽬运算符简化 if-else 语句。2.2 运算符优先级单⽬运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符优先级不确定时加括号()提升优先级。2.3 表达式求值•⾃动类型转换低精度向⾼精度转换char→int→float→double。•强制类型转换 (⽬标类型)表达式 例(int)3.14结果为 3。三、流程控制语句3.1 顺序结构程序按代码书写顺序依次执⾏是默认执⾏结构。3.2 选择结构3.2.1 if 语句1.单分⽀if(条件){语句块;}2.双分⽀if(条件){语句1;}else{语句2;}3.多分⽀代码块if(条件1){语句1;}else if(条件2){语句2;}...else{语句n;}3.2.2 switch 语句代码块switch(表达式){case常量1:语句1;break;case常量2:语句2;break;default:默认语句;break;}•注意表达式必须是整型 / 字符型case 后必须是常量break 不可省略否则 case 穿透default 可选。3.3 循环结构3.3.1 for 循环代码块for(初始化表达式;条件表达式;更新表达式){循环体;}•执⾏顺序初始化→条件判断→循环体→更新表达式→条件判断适合已知循环次数的场景。3.3.2 while 循环代码块while(条件){循环体;}•先判断条件再执⾏循环体可能⼀次不执⾏适合未知循环次数的场景。3.3.3 do-while 循环代码块do{循环体;}while(条件);•先执⾏循环体再判断条件⾄少执⾏⼀次。3.4 跳转语句1.break跳出当前循环 /switch 语句终⽌整个循环。2.continue跳过本次循环剩余语句直接进⼊下⼀次循环判断。3.goto⽆条件跳转慎⽤易破坏程序结构。四、数组4.1 ⼀维数组•定义 数据类型 数组名[数组⻓度];例int arr[5];•初始化 int arr[5]{1,2,3,4,5};或int arr[]{1,2,3};长度自动匹配•引⽤数组名 [下标]下标从0 开始最⼤下标为⻓度 - 1越界访问会导致程序异常。4.2 ⼆维数组•定义 数据类型 数组名[行][列];例int arr[2][3];•初始化 int arr[2][3]{{1,2,3},{4,5,6}};•存储按⾏优先存储本质是⼀维数组的数组。4.3 字符数组与字符串•字符数组 char str[6]{h,e,l,l,o};•字符串以\0字符串结束符结尾char str[]hello;⾃动补 \0•字符串处理函数需 string.h•strcpy (⽬标源)字符串复制•strcat (⽬标源)字符串拼接•strlen (字符串)求字符串⻓度不含 \0•strcmp (字符串 1, 字符串 2)字符串⽐较相等返回 0五、函数5.1 函数定义与调⽤•定义格式返回值类型 函数名(参数列表){函数体;return返回值;}•⽆返回值返回值类型为 void⽆需 return 语句。•函数声明函数调⽤前需声明格式 返回值类型 函数名(参数列表);解决函数调⽤顺序问题。5.2 参数传递1.值传递实参将值拷⻉给形参形参修改不影响实参单向传递。2.地址传递实参传递地址形参通过地址操作实参双向传递指针实现。5.3 函数分类•库函数C 语⾔⾃带需包含对应头⽂件如 stdio.h。•⾃定义函数⽤⼾根据需求编写的函数。•递归函数函数⾃⾝调⽤⾃⾝需设置递归出⼝避免死循环。5.4 局部变量与全局变量•局部变量定义在函数 / 代码块内作⽤域仅限当前函数 / 代码块栈区分配⾃动释放。•全局变量定义在函数外作⽤域整个程序静态存储区程序结束释放默认初始化为 0。六、指针6.1 指针基础•指针存储变量内存地址的变量定义 数据类型 *指针变量名;例int *p;•取地址符 获取变量地址 pa; p 指向变量 a•解引⽤符 *通过指针访问指向的变量 *p10;等价于a10;6.2 指针与数组•数组名代表数组⾸地址是常量指针 int arr[5]; int *parr;•指针访问数组 p[i]等价于arr[i]*(pi)等价于arr[i]6.3 指针与函数•指针作为函数参数实现地址传递修改实参值。•函数指针指向函数的指针⽤于回调函数。•指针函数返回值为指针类型的函数 int *fun(int a,int b);6.4 空指针与野指针•空指针 int *pNULL;指向地址 0不可解引⽤。•野指针指向未知内存地址的指针避免使⽤指针使⽤前需初始化。七、结构体与共⽤体7.1 结构体•定义⾃定义复合数据类型可存储不同类型数据struct结构体名{数据类型 成员1;数据类型 成员2;};•定义变量 struct结构体名 变量名;•成员访问普通变量⽤ . 变量名.成员名 指针变量⽤- 指针-成员名7.2 共⽤体联合体•定义 union共⽤体名{成员列表};•特点所有成员共享同⼀块内存空间同⼀时间只能存储⼀个成员内存⼤⼩为最⼤成员⻓度。7.3 枚举类型•定义 enum枚举名{枚举常量1,枚举常量2,...};•特点枚举常量默认从 0 开始赋值依次 1可⼿动赋值⽤于固定取值的变量。⼋、动态内存分配8.1 核⼼函数 stdlib.h1.mallocvoid *malloc(size_t size);分配指定字节的内存返回 void * 指针未初始化。◦例 int *p(int *)malloc(4*sizeof(int));2.callocvoid *calloc(size_t num,size_t size);分配 num 个 size 字节的内存初始化为 0。3.reallocvoid *realloc(void *ptr,size_t size);重新调整已分配内存的⼤⼩。4.freevoid free(void *ptr);释放动态分配的内存避免内存泄漏释放后指针置空。8.2 注意事项•动态内存分配在堆区需⼿动释放避免野指针和内存泄漏。•返回指针需强制转换为对应数据类型。九、⽂件操作9.1 ⽂件指针•定义 FILE *fp;⽤于操作⽂件是⽂件操作的核⼼。9.2 ⽂件打开与关闭•打开 fpfopen(⽂件名,打开⽅式);•常⽤打开⽅式r只读、w只写清空新建、a追加、rb⼆进制读、wb⼆进制写•关闭 fclose(fp);必须关闭⽂件避免数据丢失。9.3 ⽂件读写函数1.字符读写fgetc ()、fputc ()2.字符串读写fgets ()、fputs ()3.格式化读写fscanf ()、fprintf ()4.⼆进制读写fread ()、fwrite ()9.4 ⽂件定位•feof ()判断⽂件是否结束•fseek ()移动⽂件指针•tell ()获取⽂件指针当前位置⼗、预处理指令10.1 宏定义•⽆参宏 #define宏名 常量/表达式 例#define MAX 100•带参宏 #define宏名(参数)表达式 例#define ADD(a,b) ab⽆类型检查直接替换。10.2 ⽂件包含-头⽂件包含系统头⽂件•#include 头⽂件包含⾃定义头⽂件10.3 条件编译•#ifdef、#ifndef、#else、#endif根据条件编译指定代码⽤于程序调试和跨平台开发。⼗⼀、C 语⾔易错点总结1.变量未初始化直接使⽤导致随机值。2.数组下标越界访问引发程序崩溃。3.字符串忘记添加结束符 \0导致乱码。4.指针未初始化 / 野指针解引⽤内存报错。5.动态内存分配后未释放造成内存泄漏。6.switch 语句遗漏 break出现 case 穿透。7.逻辑运算符 、|| 使⽤不当混淆 、|。8.函数参数值传递与地址传递混淆⽆法修改实参。⼗⼆、核⼼考点与实战技巧1.重点掌握数据类型、流程控制、数组、函数、指针、结构体。2.编程思路先分析需求确定数据结构再编写流程最后调试优化。3.调试⽅法分步打印变量值检查边界条件、指针越界、内存分配问题。4.代码规范合理缩进变量名⻅名知意添加注释提⾼可读性。