作为一名刚刚闯过C语言“新手村”的勇士,我既想总结知识,又想分享心情。下面这篇博客就是我为你准备的,希望能引起大佬们的共鸣,也能帮助到其他初学者。
一、C语言的“世界观”:核心概念速览
1. 程序的基本结构
#include <stdio.h> // 预处理指令,引入标准输入输出库
int main() { // 主函数,程序入口
printf("Hello, World!\n"); // 在屏幕上输出
return 0; // 程序正常结束
}
· #include: 包含头文件,让你能使用 printf 这样的函数。
· int main(): 主函数,必须有且只能有一个。
· printf: 你的第一个“好朋友”,负责输出。
· return 0: 告诉操作系统“我运行得很好”。
2. 数据类型:
· int (整型): 存放整数,如 int age = 20;· float / double (浮点型): 存放小数,double 精度更高。· char (字符型): 存放单个字符,如 char grade = 'A';
3. 运算符与表达式:
· 算术运算符: +, -, *, /, %
· 关系运算符: >, <, ==, != (判断是否相等要用两个等号 ==,这是我踩过的第一个坑!)
· 逻辑运算符: && (与), || (或), ! (非)
· 赋值运算符: =, +=, -= 等
这一部分在我的上一个文章:c语言入门必知 中有完整内容。
4. 控制流:
if (score >= 90) {
printf("优秀!\n");
} else if (score >= 60) {
printf("及格。\n");
} else {
printf("要加油了!\n");
}
switch 语句则适合处理多分支选择。
for (int i = 0; i < 10; i++) {
printf("%d\n", i);
}
5. 函数:
// 函数声明
int add(int a, int b);
// 主函数调用
int main() {
int result = add(5, 3);
printf("结果是:%d\n", result);
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
6. 数组:
int numbers[5] = {1, 2, 3, 4, 5}; // 声明一个包含5个整数的数组
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]); // 通过下标访问元素
}
7. 指针:
· 什么是指针? 指针就是一个存储内存地址的变量。
再说白点,指针就是地址,指针的解引用就是取该地址的数据。
int a = 10;
int *p = &a; // p是一个指针,它存储了变量a的地址
printf("a的值:%d\n", a); // 输出:10
printf("a的地址:%p\n", &a); // 输出一个地址
printf("p指向的值:%d\n", *p); // 输出:10 (通过*p解引用)
8. 结构体:
struct Student {
char name[20];
int age;
float score;
};
struct Student stu1;
stu1.age = 18;
strcpy(stu1.name, "张三"); // 字符串赋值要用strcpy
这一部分常用于以后的数据结构的应用。
9.联合与枚举:
联合(union):与结构体类似,但所有成员共享同一块内存空间。
union Data {
int i;
float f;
char str[20];
};
union Data data;
data.i = 10; // 此时使用i成员
printf("%d\n", data.i);
data.f = 3.14; // 现在使用f成员,之前存储的i值被覆盖
printf("%f\n", data.f);
特点:联合的大小等于其最大成员的大小,节省内存,但同一时间只能使用一个成员。
枚举(enum):让数字更有意义,提高代码可读性。
enum Weekday {MON = 1, TUE, WED, THU, FRI, SAT, SUN};
enum Weekday today = WED;
if (today == WED) {
printf("今天是星期三!\n");
}
printf("星期三的值是:%d\n", WED); // 输出:3
用途:定义一组相关的命名常量,让代码更易理解和维护。
10. 文件操作:
C语言通过文件操作实现数据的持久化存储。
#include <stdio.h>
int main() {
FILE *fp;
// 写入文件
fp = fopen("test.txt", "w"); // 以写入模式打开文件
if (fp != NULL) {
fprintf(fp, "Hello, File!\n"); // 写入数据
fclose(fp); // 关闭文件
}
// 读取文件
char buffer[100];
fp = fopen("test.txt", "r"); // 以读取模式打开文件
if (fp != NULL) {
fgets(buffer, 100, fp); // 读取一行
printf("文件内容:%s", buffer);
fclose(fp);
}
return 0;
}
核心函数:
-
fopen():打开文件 -
fclose():关闭文件 -
fprintf():格式化写入 -
fscanf():格式化读取 -
fgets()/fputs():字符串读写 -
fread()/fwrite():二进制读写
二、学习心得与踩坑记录
1. 分号:
分号可是整个程序的“生命线”: 忘记分号 ; 是最高频的错误,没有之一。
2. “==” 和 “=” 的惨案:
在 if 条件里写成赋值号,程序逻辑会完全错误,还很难排查。
3. 数组越界是“魔鬼”:
C语言不会自动检查你是否访问了不属于你的数组空间,这会导致不可预知的后果。
4. 指针初始化:
永远要记得给指针赋值一个有效的地址后再使用,使用野指针是灾难性的。
5. 调试是最好的老师:
不要只看书,多动手写代码,多用 printf 或调试器跟踪变量的值,你会学到更多。
学习C语言,更像是一次计算机科学的启蒙。我从中学到了许多,下面给大家分享一下:
·内存管理的概念:数据存在哪里?如何存取?
·程序运行的底层逻辑:代码是如何一步步被计算机执行的?
·严谨的编程思维:任何一个微小的错误都可能导致程序崩溃。

被折叠的 条评论
为什么被折叠?



