学c注意事项
我写了很多服务器的代码,我怕有些人看不懂所以就写了这篇入门篇。
学习c语言要多动手,多练习,其实语法就几个,你了解了就会写出自己想要的代码,你不要怕不会写不出程序,因为大部分代码都有人写好,你去github和csdn会抄就行,前提是你会读懂c代码而且要知道编译流程和代码逻辑即可
第一步安装编译环境,建议装qt,c和c++相互兼容的所以别担心。可以csdn找一个qt安装链接下载,别担心装错,装错还能卸载的,学习要放下心理负担,勇于尝试。
c就几个点,内存,地址,结构体,函数,数据类型,循环,判断语句,写起来就像拼积木一样,一层层建起来
1. C语言是个啥?为啥要学它?
简单来说,咱们人跟人唠嗑,用的是中文、英文这些"自然语言"。那想让电脑听咱们的话,干活呢?就得用"计算机语言"。
C语言,就是众多计算机语言里的一位"老前辈"(诞生于上世纪70年代!),但绝对是"老当益壮"!
为啥推荐你学?
- 根基牢固: 很多流行的语言(C++, Java, Python等)都跟它有血缘关系。学好C,能帮你理解计算机底层是怎么跑的(比如内存怎么玩),以后学别的语言也更快。
- 运行贼快: C语言执行效率高,像操作系统(Windows/Linux核心)、游戏引擎、单片机(你的智能手表里可能就有)这些追求速度的地方,都少不了它。
- 面试加分: 不少大厂面试,还会问C语言基础,考察你的计算机功底。
总之,学C不亏,入门不难!
2. 来,整一个!你的第一个C程序
学习编程的"国际惯例",就是先让电脑说"Hello"。这能帮你快速检查环境搭好没,顺便熟悉下C代码长啥样。
“Hello, World!” 代码 (hello.c
)
// 这是一个注释,告诉我们下面这行是干啥的
#include <stdio.h> // 告诉编译器:我要用标准输入输出库里的东西// 每个C程序都从这里开始跑,这是"主干道"!
int main() {// 这句话就是让电脑在屏幕上打印 "Hello, C Language!"// printf 是一个现成的"喇叭"函数,专门用来输出信息printf("Hello, C Language!\n"); // \n 的意思是说完这句话换个行// 程序顺利跑完,告诉操作系统"一切OK",返回0return 0;
}
代码大白话解释:
#include <stdio.h>
:像是在说:“喂,编译器老兄,帮我把那个叫 stdio.h 的工具箱(头文件)拿过来,里面有我待会儿要用的工具(比如 printf)。”int main() { ... }
:这就是程序的"启动按钮"和"主舞台" (main 函数)。电脑拿到你的代码,第一个就找 main,然后从 { 开始,一句一句往下执行,直到 } 结束。int
表示这个 main 舞台剧表演完,会给出一个整数作为"演出评分"(return 0
就是"完美落幕"的意思)。printf("Hello, C Language!\n");
:这就是演出的核心内容——调用 printf 这个"大喇叭",把双引号 “” 里的内容喊出来。\n
是个特殊暗号,告诉喇叭喊完记得换行,别粘在下一句了。别忘了最后那个分号;
,它就像中文的句号,告诉编译器:“这句话说完了!”return 0;
:演出结束,谢幕,给个好评(返回0)。
怎么让它跑起来?(编译和运行)
你需要一个C语言编译器(比如 GCC)。在你的终端或命令行里:
编译 (把代码翻译成电脑能懂的机器码):
建议用编译器编译,比如qt简单快捷不用手戳,下面这个是Linux的看看就好
gcc hello.c -o hello
gcc
: 喊一下编译器大佬。hello.c
: 告诉它你的剧本(源代码)是哪个文件。-o hello
: 让它把翻译好的执行文件(程序)取名叫 hello (Windows 下可能会自动变成 hello.exe)。
运行 (让程序跑起来):
- Linux / macOS:
./hello
- Windows:
hello
或.\hello.exe
如果一切顺利,你屏幕上就会出现:
Hello, C Language!
“Hello, World!” 流程图
graph TDA[开始] --> B(引入 stdio.h 工具箱);B --> C{进入 main 函数主舞台};C --> D[用 printf 喇叭喊出 "Hello, C Language!" 并换行];D --> E[演出成功, 返回 0];E --> F[结束];
测试案例 1:
- 代码: 上面的 hello.c
- 操作: 编译并运行。
- 预期输出: Hello, C Language!
耶!你已经成功和C语言打了个招呼!
3. 编程的积木:数据类型与变量
程序要处理各种各样的数据,比如数字、字母。为了让电脑知道怎么存、怎么用这些数据,C语言规定了不同的 数据类型 (Data Types)。
常见的"积木"类型:
int
:用来装 整数 (integer),比如 1, 100, -5。float
:用来装 带小数点的数 (单精度浮点数),比如 3.14, -0.5。精度要求不高时用。double
:也是装 带小数点的数 (双精度浮点数),比 float 装得更精确,用的也更多。char
:用来装 单个字符 (character),比如 ‘A’, ‘b’, ‘?’。注意要用 单引号 ’ ’ 括起来。
有了类型,我们就可以创建 变量 (Variables) 了。变量就像一个 带标签的盒子,你可以给盒子起个名字(变量名),并规定这个盒子只能装哪种类型的数据。
创建变量(声明变量):
数据类型 变量名; // 格式
例子:
int age; // 创建一个叫 age 的盒子,只能装整数
float price; // 创建一个叫 price 的盒子,只能装单精度小数
char grade; // 创建一个叫 grade 的盒子,只能装单个字符
给变量装东西(赋值 & 初始化):
// 先声明,后赋值
int age;
age = 18; // 把 18 这个整数放进 age 盒子里// 声明的同时就给个初始值(推荐!)
float price = 99.9f; // 把 99.9 放进 price 盒子里 (f表示这是个float)
char grade = 'A'; // 把 'A' 这个字符放进 grade 盒子里
double pi = 3.14159; // 把 3.14159 放进 pi 盒子里
变量名的规矩(命名规则):
- 只能用字母、数字、下划线 _。
- 第一个字符不能是数字。
- 大小写敏感 (age 和 Age 是两个不同的盒子)。
- 不能用C语言的"保留字"(关键字,后面会说)做名字。
看看这些盒子占多大地方 (sizeof)
不同的数据类型,在电脑内存里占的空间大小(字节数)可能不一样。我们可以用 sizeof
这个"尺子"来量一下。
测试案例 2:变量和它们的大小 (datatypes.c)
#include <stdio.h>int main() {int age = 25;float price = 19.9f;double salary = 5000.50;char initial = 'J';// 打印变量的值 (%d, %f, %lf, %c 是对应类型的"占位符")printf("年龄 (Age): %d\n", age);printf("价格 (Price): %.2f\n", price); // %.2f 表示保留2位小数printf("工资 (Salary): %lf\n", salary); // %lf 通常用于 doubleprintf("姓氏首字母 (Initial): %c\n", initial);printf("\n--- 看看它们占多大地方 (单位:字节) ---\n");// sizeof 返回的是 size_t 类型,用 %zd 来打印比较安全printf("int 占 %zd 字节\n", sizeof(int));printf("float 占 %zd 字节\n", sizeof(float));printf("double 占 %zd 字节\n", sizeof(double));printf("char 占 %zd 字节\n", sizeof(char));printf("变量 age 占 %zd 字节\n", sizeof(age)); // 也可以量变量本身return 0;
}
编译运行: gcc datatypes.c -o datatypes
然后 ./datatypes
(或 datatypes.exe
)
预期输出 (注意:具体大小可能因系统和编译器略有不同,尤其是 int):
年龄 (Age): 25
价格 (Price): 19.90
工资 (Salary): 5000.500000
姓氏首字母 (Initial): J--- 看看它们占多大地方 (单位:字节) ---
int 占 4 字节 // 常见大小,也可能是2或8
float 占 4 字节
double 占 8 字节
char 占 1 字节
变量 age 占 4 字节 // 和 int 类型大小一样
为什么要有不同大小的类型?
就像你寄快递,寄个小戒指用小盒子,寄台电视用大箱子。数据也一样,存个小整数用 short
(短整型,比 int 可能更小),存很大的数可能要用 long long
(长长整型)。合理选择类型,能更有效地利用内存空间。
流程图:变量声明、赋值、打印与测大小
4. 关键字:C语言的"保留字"
C语言里有一些单词,被赋予了特殊的含义,它们是语言规则的一部分,我们不能把它们用作变量名或其他自定义的名字。这些就是 关键字 (Keywords) 或叫 保留字 (Reserved Words)。
比如我们已经见过的 int
, float
, char
, double
, return
都是关键字。还有一些控制流程的,比如 if
, else
, for
, while
等等。
C语言总共有几十个关键字,你不需要一下子全记住! 随着学习的深入,你会自然而然地认识它们。
常见的几个:
- 数据类型相关:
int
,float
,double
,char
,void
,short
,long
,signed
,unsigned
,struct
,union
,enum
,typedef
,sizeof
- 流程控制相关:
if
,else
,switch
,case
,default
,for
,while
,do
,break
,continue
,goto
,return
- 存储相关:
auto
,static
,register
,extern
,const
,volatile
重点: 看到这些词,知道它们有特殊用途,别拿来当变量名就行!
5. 代码的"句子":语句
我们的C程序,就是由一条条 语句 (Statements) 组成的,就像文章由一个个句子构成一样。大部分语句都以分号 ;
结尾,表示一个指令的结束。
C语言里有几种不同类型的"句子":
- 空语句 (Empty Statement): 就一个孤零零的分号
;
。它啥也不干,但语法上是合法的,有时在特定结构中会用到(现在先不用管)。
; // 这就是一条空语句
- 表达式语句 (Expression Statement): 一个表达式后面跟个分号。最常见的就是赋值操作。
age = 18; // 赋值表达式 + ; -> 表达式语句
price * 0.8; // 这个计算本身是个表达式,加上分号也是语句,虽然结果没被使用
x++; // x自增,也是表达式语句 (等价于 x = x + 1;)
- 函数调用语句 (Function Call Statement): 调用一个函数,后面跟个分号。我们用
printf
就是典型的例子。
printf("Hello!\n"); // 调用printf函数 + ; -> 函数调用语句
scanf("%d", &age); // 调用scanf函数读取输入 (后面会学)
- 复合语句 (Compound Statement) / 代码块 (Block): 用一对花括号
{}
括起来的一堆语句。它在语法上被视为一条单独的语句,常用于if
,while
,for
和函数定义中。
{ // 这是一个复合语句的开始int temp = 10;printf("临时变量是: %d\n", temp);temp = temp + 5;
} // 复合语句结束
注意: 复合语句的末尾 不需要 再加分号。
- 控制语句 (Control Statement): 用来控制程序执行流程的,比如决定代码走哪条路(if-else, switch),或者让某段代码重复执行(for, while, do-while),还有跳转 (break, continue, goto, return)。这些是C语言的"导航系统",非常重要,我们后面会专门学。
简单理解: 代码就是一句一句(语句)往下执行的,分号是句号,花括号 {}
用来包一组句子形成一个段落(代码块)。
6. 让代码说话:注释
代码不仅是给电脑看的,更是给人(包括几个月后的你自己!)看的。为了让代码更容易理解,我们可以添加 注释 (Comments)。
注释就像是代码旁边的"旁白"或"注解",编译器会完全忽略它们,它们只为阅读代码的人服务。
为啥要写注释?
- 解释复杂逻辑:“这段代码是为了解决那个超难的bug…”
- 说明变量用途:“这个 isValid 变量是用来标记用户输入是否合法的…”
- 标记待办事项:“// TODO: 这里需要加个错误处理”
- 暂时"屏蔽"代码:测试时,可以把某段代码注释掉,暂时不让它执行。
C语言注释的两种写法:
- 单行注释
//
: 从//
开始,一直到这行末尾,都是注释。适合简短的说明。
// 这是一整行注释
int count = 0; // 这是跟在代码后面的注释,解释 count 的初始值
- 多行注释
/* ... */
: 从/*
开始,到*/
结束,中间的所有内容(可以跨越多行)都是注释。适合大段的解释或暂时屏蔽多行代码。
/*这里可以写好多好多行的注释,详细说明下面这个函数的功能、参数含义等等。
*/
int calculate_sum(int a, int b) {return a + b;
}/* 暂时把这段代码注释掉,以后可能还会用
if (error_occurred) {handle_error();
}
*/
测试案例 3:使用注释 (comments.c)
#include <stdio.h>/** 程序名称: 注释示例* 功能: 演示两种注释的使用方法* 作者: [你的名字]* 日期: 2024-07-29*/
int main() {// 定义一个整数变量age,并初始化为18int age = 18;// 使用printf函数打印年龄printf("我的年龄是: %d\n", age); // 在屏幕上显示年龄/*// 下面这行代码被注释掉了,所以不会执行printf("这行不会被打印出来。\n");*/// 程序正常结束return 0; // 返回0表示成功
}
编译运行: gcc comments.c -o comments
然后 ./comments
(或 comments.exe
)
预期输出:
我的年龄是: 18
(注意:被注释掉的那行 printf 没有输出)
写注释的好习惯:
- 写有意义的注释,解释"为什么"这么做,而不是简单重复代码"干了什么"。
- 保持注释和代码同步更新。
- 别写太多废话注释。
7. 接下来学什么 & 推荐资源
恭喜你!你已经迈出了C语言学习的第一步,掌握了:
- C语言是啥
- 写和运行第一个程序 (Hello, World)
- 基本的数据类型和变量
- 关键字的概念
- 语句和注释
但这只是新手村!接下来,你可以继续探索:
- 运算符: 加减乘除 (+ - * / %),比较大小 (> < == !=),逻辑判断 (&& || !) 等。
- 输入 (scanf): 如何从键盘读取用户输入的数据。
- 控制流: if-else (如果…就…否则…),switch (多选一),for / while (重复执行/循环)。这些是让程序"聪明"起来的关键!
- 数组: 一次性存储多个同类型的数据(比如存一个班所有同学的成绩)。
- 函数: 把代码打包成可重用的模块,让程序更整洁。
- 指针: C语言的"核武器",直接操作内存地址,强大但也需要小心使用。
学习资源推荐
经典书籍 (适合静心啃):
- 《C Primer Plus》 (第6版): 非常厚,但内容详尽,讲解细致,例子丰富,适合自学入门。★★★★★
- 《C程序设计语言》 (The C Programming Language, K&R): C语言之父写的经典之作,非常精炼,但可能对纯新手有点难度,适合有一定基础后拔高