学习东西不能光听,一定要多动手,多实践,才能看出问题,并且去解决。往往你听起来会了,但是实际让你在敲一遍刚刚的代码,真不一定能敲对。
学习编程尤其如此。看视频、听讲解,感觉每一步都懂了,可一旦关掉教程,让你自己从头敲一遍,往往卡在第一个报错上。所以从今天开始,咱们定一个原则:每学一个知识点,就动手敲一遍代码,亲眼看到运行结果。只有亲手踩过坑、亲手解决掉问题,知识才是真正属于你的。
接下来,咱们按顺序学习 C 语言的基础知识。下面这份清单就是咱们的学习路线,每一项都会配合代码实战来讲解。
1. 基础语法与程序结构
先认识一个 C 程序的基本骨架。任何 C 程序都从main函数开始执行,#include用来引入头文件。
#include <stdio.h> int main() { printf("Hello, C!\n"); return 0; }把这段代码敲进编译器,运行,看到屏幕上输出Hello, C!,你的第一个 C 程序就跑通了。
2. 变量与数据类型
变量用来存数据,数据类型决定了数据占多大空间、能存什么范围的值。常用的类型有:
- char:字符型,占 1 字节,可存一个字符或小整数。
- int:整型,占 4 字节,存普通整数。
- short:短整型,占 2 字节,存范围较小的整数。
- unsigned char:无符号字符型,只能存非负数。
- unsigned int:无符号整型,只能存非负整数。
- uint8_t:8 位无符号整数,等价于 unsigned char。
- uint16_t:16 位无符号整数,等价于 unsigned short。
#include <stdio.h> #include <stdint.h> int main() { char a = 'A'; int b = 100; short c = 10; unsigned char d = 200; uint8_t e = 255; uint16_t f = 65535; printf("a=%c, b=%d, c=%d, d=%u, e=%u, f=%u\n", a, b, c, d, e, f); return 0; }动手改一改这些变量的值,看看超出范围会发生什么,你会对数据类型有更深的体会。
3. 变量与常量
变量可以随时改变,常量一旦定义就不能改。#define是常用的定义常量的方式。
#include <stdio.h> #define PI 3.14159 int main() { int r = 2; float area = PI * r * r; printf("area = %f\n", area); return 0; }试着把PI的值改掉再编译,看看编译器会不会报错,你就明白常量的含义了。
4. 运算符
C 语言的运算符很丰富,这里先掌握最常用的一批:
- 算术运算符:
+、-、*、/、++、-- - 位运算符:
&、|、^ - 逻辑运算符:
&&、||、! - 关系运算符:
<、>、=
#include <stdio.h> int main() { int a = 5, b = 3; printf("a+b=%d\n", a + b); printf("a&b=%d\n", a & b); printf("a|b=%d\n", a | b); printf("a^b=%d\n", a ^ b); printf("a&&b=%d\n", a && b); printf("a||b=%d\n", a || b); printf("!a=%d\n", !a); printf("a>b=%d\n", a > b); return 0; }把每个运算符的结果都打印出来,对照着看,理解会快很多。
5. 流程控制语句
程序不是永远从上往下跑,需要根据条件做判断、循环执行,这就用到流程控制语句。
- if-else:条件判断。
- for:计数循环。
- while:条件循环。
- break:跳出循环。
#include <stdio.h> int main() { int i; // if-else int score = 85; if (score >= 60) { printf("及格\n"); } else { printf("不及格\n"); } // for for (i = 0; i < 5; i++) { printf("i=%d\n", i); } // while + break int n = 0; while (1) { n++; if (n >= 3) { break; } printf("n=%d\n", n); } return 0; }把if的条件改一改,把for的循环次数改一改,看看输出怎么变,你就真正掌握它们了。
6. 数组与字符串
数组用来存一组相同类型的数据,字符串本质上是字符数组。
#include <stdio.h> int main() { int nums[5] = {10, 20, 30, 40, 50}; char str[] = "Hello"; for (int i = 0; i < 5; i++) { printf("nums[%d]=%d\n", i, nums[i]); } printf("str=%s\n", str); return 0; }试着修改数组里的某个值,或者把字符串改成你自己的名字,再运行看看。
7. 函数
函数把一段逻辑封装起来,方便重复调用。C 程序就是由一个个函数组成的。
#include <stdio.h> int add(int x, int y) { return x + y; } int main() { int result = add(3, 4); printf("3 + 4 = %d\n", result); return 0; }自己再写一个减法函数、乘法函数,体会一下封装和复用的好处。
8. 指针
指针是 C 语言的难点,也是精髓。它存的是变量的地址,通过地址可以间接访问变量。
#include <stdio.h> int main() { int a = 10; int *p = &a; printf("a 的值: %d\n", a); printf("a 的地址: %p\n", &a); printf("p 的值: %p\n", p); printf("通过 p 访问 a: %d\n", *p); *p = 20; printf("修改后 a 的值: %d\n", a); return 0; }指针一开始容易绕晕,别急,多画图、多敲几遍,慢慢就通了。
9. 结构体
结构体把不同类型的数据打包成一个整体,用来描述一个对象。
#include <stdio.h> #include <string.h> struct Student { char name[20]; int age; float score; }; int main() { struct Student s1; strcpy(s1.name, "小明"); s1.age = 18; s1.score = 92.5; printf("姓名: %s\n", s1.name); printf("年龄: %d\n", s1.age); printf("成绩: %.1f\n", s1.score); return 0; }试着再定义一个学生,或者给结构体加一个字段,看看怎么用。
10. 总结
以上就是咱们 C 语言基础的学习路线。记住,光听不练假把式。每一个知识点,都请打开编译器亲手敲一遍,遇到报错就自己查、自己改。等你把这份清单里的代码全部亲手跑通,你的 C 语言基础就算真正打牢了。