1.环境搭建
(1)选择轻量编辑器 / IDE:
新手首选:Dev-C++(一键安装,无配置)、Code::Blocks(开源免费);
进阶备选:VS Code + MinGW(需配置环境变量,适合后续拓展)、Visual Studio(功能全,适合 Windows 平台)。
(2)掌握基础操作:新建项目、编写代码、编译(gcc命令)、运行、调试(查看报错信息)。
2.核心知识点
(1)C 语言的定位
面向过程、底层性(贴近硬件)、可移植性,应用场景(操作系统、嵌入式、驱动开发)。
(2)第一个程序:Hello World
理解程序结构(头文件#include <stdio.h>、主函数main()、输出函数printf())。
(3)基本语法规则
分号结束语句、注释(//单行 //* */多行)、大小写敏感。
(4)数据类型与变量
a.基本类型:int(整型)、float/double(浮点型)、char(字符型);
b.变量定义与赋值(int a = 10;)、常量(#define PI 3.14/const int b = 5);
c.输入输出:scanf()(输入)、printf()(输出,掌握格式符%d/%f/%c)。
(5)实践任务
编写程序实现:输入两个整数,输出其和 / 差 / 积 / 商;
编写程序输出指定格式的字符串(如多行文本、带变量的提示语)。
3.流程控制
(1)分支结构
if-else(单分支 / 多分支)、switch-case(多条件匹配,注意break);
实践:判断奇偶、成绩等级划分(90 + 优秀 / 80-89 良好等)、简易计算器(加减乘除分支)。
(2)循环结构
for(固定次数循环,最常用)、while(条件循环)、do-while(至少执行一次);
循环控制:break(终止循环)、continue(跳过本次循环);
实践:打印 1-100 的整数、计算 1-100 的和、打印九九乘法表、判断素数。
4. 数组(批量数据处理)
(1)一维数组
定义(int arr[10];)、初始化、下标访问(注意下标从 0 开始,避免越界);
实践:数组元素求和、查找最大值 / 最小值、数组逆序输出。
(2)二维数组
定义(int arr[3][4];)、初始化、遍历;
实践:打印二维数组、计算矩阵行 / 列和。
(3)字符数组
字符串处理(char str[20] = "hello";),掌握 <string.h> 库函数:
strlen()(字符串长度)、strcpy()(字符串拷贝)、strcmp()(字符串比较)、strcat()(字符串拼接);
实践:输入字符串,统计字符个数、判断是否为回文字符串。
5. 函数(代码复用与模块化)
(1)函数基础
定义(返回值类型 + 函数名 + 参数列表 + 函数体)、调用;
(2)函数参数
值传递(形参不影响实参)、地址传递(后续结合指针);
(3)函数进阶
递归函数(如阶乘、斐波那契数列)、函数声明与分文件编写(.h头文件 + .c源文件);
注意:递归需设置终止条件,避免栈溢出。
6. 指针基础
(1)指针定义
变量的地址(&取地址)、指针变量(int *p;),*p解引用(访问指针指向的内容);
(2)指针与变量
int a = 10; int *p = &a; *p = 20;(修改 a 的值);
(3)指针与数组
数组名是数组首元素的地址(arr[0] == *arr),指针遍历数组(p++);
(4)指针与字符串
字符指针(char *str = "hello";),对比字符数组的区别(字符串常量不可修改)。
(5)指针参数
通过指针实现函数的 “输出型参数”(如交换两个整数);
(6)二级指针(int **pp;)
理解指针的地址,常用于二维数组、动态内存分配;
(7)函数指针(int (*fp)(int, int);)
指向函数的指针,可实现回调函数。
7. 内存管理
(1)内存分区
栈(局部变量、函数参数)、堆(动态分配)、静态区(全局变量、static变量)、常量区;
(2)动态内存分配
malloc()(分配内存)、calloc()(分配并初始化)、realloc()(重新分配)、free()(释放内存);
(3)注意
必须配对使用malloc/calloc和free,避免内存泄漏;检查malloc返回值(是否为NULL)。
(4)常见问题
野指针(未初始化的指针)、空指针(NULL)、内存泄漏、双重释放。
(5)实践任务
用指针实现数组排序(冒泡排序 / 选择排序);
用动态内存分配实现动态数组(根据用户输入的长度创建数组);
编写函数,通过指针反转字符串。
8. 结构体(自定义数据类型)
(1)结构体定义
struct Student { char name[20]; int age; float score; };;
(2)结构体变量
定义、初始化、成员访问(.或->,指针访问用->);
(3)结构体数组
存储多个自定义类型数据(如多个学生信息);
(4)结构体指针
结合指针操作结构体,减少拷贝开销;
(5)进阶:结构体嵌套、位段(节省内存,嵌入式常用)、枚举(enum)
9. 文件操作(持久化存储)
(1)文件指针
FILE *fp;;
(2)文件打开
/ 关闭:fopen()("r"读 /"w"写 /"a"追加 /"rb"二进制读)、fclose();
(3)文本文件操作
fscanf()/fprintf()(格式化读写)、fgets()/fputs()(行读写);
(4)二进制文件操作
fread()/fwrite()(块读写,适合存储结构体);
(5)文件定位
fseek()、ftell()、rewind()。
10. 预处理与编译
(1)预处理指令
#define(宏定义,如宏函数#define MAX(a,b) ((a)>(b)?(a):(b)))、#include(文件包含)、#ifdef/#endif(条件编译);
(2)编译过程
预处理(.i)→ 编译(.s)→ 汇编(.o)→ 链接(可执行文件)。
(3)实践任务
编写学生信息管理系统(结构体 + 数组 / 动态内存 + 文件操作):
功能:添加、查询、修改、删除学生信息,数据持久化到文件;
编写文件拷贝工具(支持文本 / 二进制文件)。
11.经典实战项目
(1)控制台小游戏:扫雷、贪吃蛇(结合循环、数组、函数);(2)数据结构实现:用 C 语言实现链表(单链表 / 双向链表)、栈、队列、二叉树(理解指针的核心应用);
(3)系统工具:简易计算器、日志系统、文件加密 / 解密。
12. 拓展方向
(1)嵌入式开发:结合单片机(如 STM32),学习 C 语言操作寄存器、外设;(2)操作系统内核:阅读 Linux 内核源码(C 语言编写),理解进程、线程、内存管理;
(3)网络编程:学习 Socket 编程,用 C 实现 TCP/UDP 通信;
(4)性能优化:理解内存对齐、缓存命中率、指针优化,编写高性能代码。
13. 避坑与规范编码规范
(1)变量命名(驼峰 / 下划线)、代码注释、函数拆分(单一职责);
(2)调试技巧:使用 IDE 调试(断点、监视变量)、打印日志、排查段错误(核心转储);
(3)常见错误:数组越界、野指针、内存泄漏、宏定义缺少括号、整数溢出。
浙公网安备 33010602011771号