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 输出字符串
常用字符串函数(需包含 <string.h>):
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语言学好了,后续所有编程语言都会变得简单!
加油,你已经迈出了非常重要的一步!
随时告诉我下一步想学什么,我继续为你整理超全版。