C语言基础入门超全整理 | 从零基础到上手核心语法 (最适合零基础 + 面试/考研/自学 完整版)
这是一篇真正从零开始、系统性、结构化的C语言核心语法合集。学完这篇,你就能独立写出完整的C程序,理解内存、指针、数组等核心概念,为后续数据结构、操作系统、嵌入式打下坚实基础。
1. C语言概述与开发环境
- 特点:高效、贴近硬件、可移植性强、指针灵活(也最容易出错)
- 应用领域:操作系统内核、嵌入式、驱动、游戏引擎、高性能服务器
- 学习建议:用 VS Code + GCC 或 Dev-C++ / CLion
第一个程序(Hello World) - #include <stdio.h> // 标准输入输出头文件
- int main() // 主函数,程序入口
- {
- printf("Hello, World!\n"); // 输出并换行
- return 0; // 返回0表示程序正常结束
- }
复制代码
编译运行命令(命令行): - gcc hello.c -o hello # 编译生成可执行文件
- ./hello # Linux/Mac 运行
- hello.exe # Windows 运行
复制代码
2. 数据类型与变量
基本数据类型(必背大小,32/64位系统)
| 类型 | 关键字 | 字节数(常见) | 取值范围(有符号) | 格式化输出 |
|---|
| 字符型 | char | 1 | -128 ~ 127 | %c | | 短整型 | short | 2 | -32768 ~ 32767 | %hd | | 整型 | int | 4 | -2^31 ~ 2^31-1 | %d | | 长整型 | long | 4或8 | 取决于系统 | %ld | | 长长整型 | long long | 8 | -2^63 ~ 2^63-1 | %lld | | 单精度浮点 | float | 4 | ≈ ±3.4E-38 ~ ±3.4E+38 | %f | | 双精度浮点 | double | 8 | ≈ ±1.7E-308 ~ ±1.7E+308 | %lf |
变量定义与初始化 - int a = 10; // 定义并初始化
- int b; // 只定义,未初始化(值随机!危险)
- const int MAX = 100; // 常量,定义后不可修改
复制代码
sizeof运算符:求变量或类型占用的字节数 - printf("%zu\n", sizeof(int)); // 输出4(或8)
- printf("%zu\n", sizeof(a)); // 输出变量a占用的字节
复制代码
3. 常量与宏定义 - #define PI 3.14159 // 宏定义(预处理阶段替换)
- const double PI2 = 3.14159; // const常量(编译时检查)
- enum Color { RED, GREEN, BLUE }; // 枚举常量
复制代码
4. 运算符与表达式
- 算术运算符:+ - * / %
- 关系运算符:> < >= <= == !=
- 逻辑运算符:&& || !(短路特性)
- 位运算符:& | ^ ~ << >>
- 赋值运算符:= += -= 等
- 三目运算符:条件 ? 表达式1 : 表达式2
- 逗号运算符:,(从左到右,最后一个表达式的值作为结果)
优先级记忆口诀(从高到低): 括号 → 单目 → 算术 → 关系 → 逻辑 → 赋值 → 逗号
5. 程序流程控制
(1)顺序结构
默认执行顺序。
(2)选择结构 - if (条件) { ... }
- else if (条件) { ... }
- else { ... }
- // switch(只能判断整数或字符)
- switch (表达式) {
- case 值1: ... break;
- case 值2: ... break;
- default: ...
- }
复制代码
(3)循环结构(三大循环) - // 1. while(先判断后执行)
- while (条件) { ... }
- // 2. do-while(先执行后判断,至少执行一次)
- do { ... } while (条件);
- // 3. for(最常用)
- for (初始化; 条件; 增量) { ... }
复制代码
break:跳出当前循环 continue:跳过本次循环剩余语句
6. 数组(Array) - int arr[10]; // 定义数组,元素未初始化
- int nums[5] = {1, 2, 3, 4, 5}; // 初始化
- int scores[] = {90, 85, 92}; // 自动推断大小
- // 二维数组
- int matrix[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
复制代码
数组特点:
- 内存连续
- 下标从0开始
- 不能整体赋值(除了初始化时)
- 作为函数参数时退化为指针
7. 字符串
C语言中字符串就是以 ‘\0’ 结尾的字符数组。 - char str1[] = "Hello"; // 自动加 '\0'
- char str2[10] = {'H','e','l','l','o','\0'};
- printf("%s\n", str1); // %s 输出字符串
复制代码
常用字符串函数(需包含 ):
- strlen():字符串长度(不含’\0’)
- strcpy():字符串拷贝
- strcat():字符串拼接
- strcmp():字符串比较
8. 函数(Function) - // 函数定义
- 返回类型 函数名(参数类型 参数名, ...) {
- // 函数体
- return 返回值;
- }
- // 函数声明(原型)
- int add(int a, int b);
- int main() {
- int result = add(3, 5);
- return 0;
- }
- int add(int a, int b) {
- return a + b;
- }
复制代码
参数传递方式:
- 值传递(默认):形参是实参的拷贝,修改不影响实参
- 地址传递:传递指针或数组名,可修改实参
9. 指针(Pointer)—— C语言灵魂 - int a = 10;
- int *p = &a; // p 是指向int的指针,存放a的地址
- printf("%d\n", *p); // *p 取指针指向的值 → 10
- printf("%p\n", p); // 输出地址
- // 指针与数组
- int arr[5] = {1,2,3,4,5};
- int *ptr = arr; // 数组名就是首元素地址
- printf("%d\n", *(ptr + 2)); // 输出3
复制代码
指针进阶(后续会重点展开):
10. 结构体(Struct) - struct Student {
- int id;
- char name[20];
- int age;
- };
- struct Student s1 = {1001, "张三", 20};
- struct Student *ps = &s1;
- printf("%s\n", ps->name); // 通过指针访问成员用 ->
复制代码
11. 常用头文件与预处理 - #include <stdio.h> // 输入输出
- #include <stdlib.h> // malloc、exit等
- #include <string.h> // 字符串处理
- #include <math.h> // 数学函数
- #include <time.h> // 时间
- #define DEBUG 1 // 宏定义
复制代码
12. 内存管理初步
- malloc() / calloc() / realloc() / free()
- 栈内存 vs 堆内存
- 野指针、空指针
学习路线建议(从零到上手)
- 第1周:数据类型 + 运算符 + 流程控制 + 数组
- 第2周:函数 + 字符串 + 指针基础
- 第3周:结构体 + 动态内存 + 文件操作
- 第4周:综合项目(学生管理系统、通讯录等)
推荐练习项目(按顺序):
- 九九乘法表
- 冒泡/选择排序
- 学生成绩管理系统(结构体 + 数组)
- 简单计算器(switch + 函数)
- 字符串处理工具
这篇是C语言基础最完整的核心语法整理。后续我将陆续推出:
- C语言指针进阶与内存模型
- C语言数组与指针的那些事
- 结构体、共用体、枚举深度解析
- 文件操作 + 动态内存管理
- C语言常见面试题100道
想立即继续哪一部分? 直接回复:
- “下一章 指针详解”
- “学生管理系统完整代码”
- “C语言常见错误与调试技巧”
- 或其他你想学的具体内容
从零基础开始,稳扎稳打,C语言学好了,后续所有编程语言都会变得简单!
加油,你已经迈出了非常重要的一步! 随时告诉我下一步想学什么,我继续为你整理超全版。 |