前言

很多人初学 C 语言时,总想着快速写出复杂程序,跳过基础概念死记硬背语法,结果越学越混乱。其实 C 语言的核心是基础语法 + 逻辑思维,入门阶段一定要沉下心吃透基础。

首先,务必理解核心概念,不要死记代码。变量、数据类型、运算符、流程控制(顺序、选择、循环)、函数、数组、指针、结构体这些是 C 语言的基石,一定要弄明白每个概念的含义和用法。比如指针是 C 语言的重点也是难点,不要只背“指针是地址”,要结合内存模型,理解指针变量、指针操作、指针与数组的关系,亲手画图梳理内存指向,才能真正吃透。

这些均为指引内容,不用在意

第一节:穿越代码神域

程序员盯着电脑里一片空白的 C 语言编辑器,指尖悬在键盘上半小时,连一行代码都敲不出来。就在他烦躁地抓头发时,屏幕突然炸开刺眼的白光,耳边传来细碎的电子杂音,像是无数代码在尖叫

再次睁眼,他发现自己躺在一片漂浮着荧光代码的石板路上。周围是破败的小镇,木质房屋的墙面上爬满了褪色的 int 、 float 字符,街道上的像素小人身体忽明忽暗,像快要熄灭的灯泡。远处的天空中,一团扭曲的黑色乱云正缓慢蠕动,偶尔有几串乱码砸在地上,发出滋啦的声响,惊得路边的代码小花瞬间枯萎。

“这里是……哪里?”林野撑着胳膊坐起来,发现自己的手腕上浮现出淡蓝色的代码纹路,像是某种印记。

“这里是代码神域的变量小镇,我是你的引导精灵小 C~”

软萌的声音从肩头传来,林野低头一看,一个巴掌大的小精灵正坐在他的肩膀上,穿着蓝白相间的连衣裙,手里捧着一本迷你版的《C 语言入门手册》,背后还扑闪着两对透明的代码翅膀。

第二节:小镇的困境

小 C 晃着腿,指着那些透明的居民说:“这片神域原本靠‘主函数本源’维持运转,但乱码邪神打碎了本源,整个神域的代码法则都崩坏了。变量小镇是神域的基础,这里的居民需要靠‘变量’记录自己的状态——比如面包店的阿婆需要记录面粉的数量,铁匠大叔要记录打造的武器耐久度,但现在本源碎片缺失,小镇的变量法则失效,大家的状态都开始混乱,再拖下去,小镇会彻底消失的!”

林野看向不远处的面包店,阿婆正对着空面粉袋发呆,嘴里念叨着:“我明明记得还有 5 袋面粉的……怎么变成 0 了?”铁匠大叔手里的铁锤突然变得透明,哐当一声掉在地上。

“那我能做什么?”林野攥紧了拳头,手腕上的代码纹路微微发烫。

“你是被本源碎片选中的代码勇者,只有你能编写代码修复法则!”小 C 飞到他面前,认真地说,“首先得学会最基础的变量定义和输入输出——这是修复小镇的第一步。”

第三节:第一行代码的温度

小 C 挥了挥手册,地面上浮现出一个虚拟的代码编辑器。“变量就像装数据的盒子,不同的盒子装不同类型的数据:整数用 int ,小数用 float ,字符用 char 。而 printf 和 scanf 是用来输出和输入数据的工具,就像给盒子贴标签、往盒子里放东西。”

林野盯着编辑器,指尖有些发抖——现实里他连 Hello World 都写不利索。小 C 察觉到他的紧张,轻轻蹭了蹭他的脸颊:“别怕,跟着我写就好。先帮面包店阿婆记录面粉数量吧。”

深吸一口气,林野按照小 C 的指导,敲下第一行代码:

c

#include <stdio.h>

int main() {

int flour = 5;

printf("面包店的面粉数量:%d 袋 \n", flour);

return 0;

}

 

按下“编译”的瞬间,柔和的光芒从编辑器里散开,笼罩了面包店。阿婆惊讶地看着面粉袋重新鼓起来,里面的面粉清晰地显示出“5 袋”的字样。街道上的荧光代码也重新稳定下来,原本透明的居民身体逐渐变得饱满。

“成功啦!”小 C 欢呼着绕着林野飞了一圈,“你看,代码不只是冰冷的字符,它能给小镇带来希望呀~”

第四节:击退语法错误怪

就在居民们围上来道谢时,远处的乱云突然翻涌,一只浑身覆盖着红色错误提示的魔物冲了过来——它的身体上爬满了“缺少分号”“未定义变量”“语法错误”的字样,嘶吼着扑向人群。“是语法错误怪!它是乱码邪神派来破坏修复成果的!”小 C 的声音变得急促,“快用你刚学会的代码攻击它!”林野稳住心神,快速在编辑器里写下代码:

c

#include <stdio.h>

int main() {

int attack = 100;

printf("代码编译术!%d点伤害!\n", attack);

return 0;

}

蓝色的代码光束从编辑器里射出,精准击中魔物。语法错误怪发出刺耳的尖叫,身上的错误提示开始碎裂,最终化作一团乱码消散。居民们纷纷鼓掌,面包店阿婆递来一个热乎乎的代码面包,铁匠大叔则送给林野一把用代码锻造的小匕首。小 C 飞到林野的肩膀上,晃着手册说:“恭喜你,代码勇者!你获得了‘基础编译者’的称号,本源碎片的力量也激活了第一重!不过这只是开始!

正文

C 程序是什么样子的? 这里会有许多示例。初见 C 程序会觉得有些古怪,程序中有许多 {},

cp->tort 和 *ptr++ 这样的符号。然而,在学习 C 的过程中,对这些符号和 C 语言特有的其他符号会越来越熟悉,甚至会喜欢上它们。如果熟悉与 C 相关的其他语言,会对 C 语言有似曾相识的感觉。本章,我们从演示一个简单的程序示例开始,解释该程序的功能。同时,强调一些 C 语言的基本特性。

第一个部分,简单的C程序示例

我们来看一个简单的 C 程序,如所示。该程序演示了用 C 语言编程的一些基本特性。请先通读程序,看看你自己是否能明白该程序的用途

简单C语言程序示例

#include <stdio.h>

int main (void)* 一个简单的 C 程序 *

{

int num;/* 定义一个名为 num 的变量 */

num = 1;/* 为 num 赋一个值 */

printf("I am a simple");* 使用 printf() 函数 *

printf("computer.\n");

printf("这是 %d \n", num);

return 0;

}

有张图片挺好的

(当然我现在也正在学习,里面有些东西我目前也不会,一同努力吧)(๑•̀ㅂ•́)و

第二部分:开始引入知识

1. 好多人应该好奇 #include <stdio.h> 这是什么

👉 告诉编译器:我要用到系统自带的「标准输入输出工具包」,里面有 printf 这种打印函数。

2. int main(void)

👉 这是程序的入口函数,所有 C 程序都从这里开始运行。- int :表示这个函数最后会返回一个整数(用来告诉系统“我正常跑完了”)

- main :函数名,是程序的“起点”

- void :表示这个函数不需要接收任何参数

3. /* 一个简单的 C 程序 */

👉 注释!写在 /* */ 里的内容,编译器会直接忽略,只是给人看的说明文字,不影响程序运行。

4. {和}

👉 一对大括号,用来框住 main 函数里的所有代码,相当于“函数的开始和结束标记”。

5. int num;

👉 声明一个变量:我要定义一个叫 num 的变量,它的类型是 int (整数类型),用来存整数。

6. num = 1;

👉 给变量赋值:把数字 1 存到刚才定义的 num 变量里。

7. printf("I am simple");

👉 调用 printf 函数,在屏幕上打印文字 (注意末尾没有换行,光标会停在同一行)。

8. printf("computer.\n");

👉 继续调用 printf ,在刚才的文字后面接着打印 computer. ,然后 \n 是换行符,告诉程序“打完这里就换一行”。

9. printf("My favorite number is %d because it is first.\n", num);

👉 打印一段包含变量的文字:- %d 是占位符,意思是“在这里打印一个整数”

- 后面的 num 就是要打印的变量,程序会把 num 的值(也就是 1 )填到 %d 的位置里。

10. return 0;

👉 程序运行结束,给系统返回一个 0 ,表示“我正常执行完了,没了。

第三部分:学会声明和赋值

一、变量声明( int num;  那部分)

1. 声明是什么?

- 就是告诉编译器:“我要用一个叫 num 的变量,它是 int (整数)类型的,帮我在内存里给它留个位置。”

声明必须用分号 ; 结尾。

2.  int  是什么?

- int 是 C 语言的关键字,代表“整数类型”,用来定义整数变量。

关键字是被 C 语言“征用”的词,不能拿来当变量名、函数名用(比如你不能定义一个叫 int 的变量)。

3. 标识符(变量名)

num 就是标识符,也就是变量 / 函数的名字,用来和内存地址绑定。

4. 变量声明的位置规则

- 老标准 C(C89):所有变量声明必须写在代码块的最开头,不能和赋值语句混在一起。

- 新标准 C(C99/C11):可以在代码块里、变量第一次使用前声明,更灵活。

二、变量命名规则 & 规范

1. 合法命名规则

- 只能用:小写字母、大写字母、数字、下划线 _

- 开头不能是数字,只能是字母或下划线

- 不能用 C 语言的关键字(比如 int 、 if 、 for )

- 区分大小写: stars 、 Stars 、 STARS 是三个完全不同的名字

- 编译器通常只识别前 63 个字符,太长的名字后面会被忽略

2. 好的命名习惯

- 用有意义的名字(比如 sheep_count 而不是 x3 ),别人一看就知道变量是干嘛的

- 尽量别用单个下划线 / 双下划线开头的名字(比如 _kcab ),因为系统库常用这类名字,容易冲突

3. 举个例子有效名字 无效名字

三、为什么C语言必须先声明变量才能用?

1. 方便阅读和维护:

所有变量声明放在一起,别人一眼就能看懂这个程序用到了哪些变量,分别是干嘛的。

2. 帮你提前规划程序:

写声明的过程,就是在梳理“程序需要什么数据、要怎么处理”的逻辑。

3. 帮你抓拼写错误:

比如你定义了 RADIUS1 ,后面不小心写成 RADIUSI ,编译器会直接报错,帮你避免这种低级 bug。

4、补充:C语言数据类型

- C 语言支持多种数据类型,比如整数( int )、字符、浮点数(小数)等。声明变量时指定类型,编译器才能正确地给它分配内存、存数据、读数

5、赋值语句( num = 1; )

1. 赋值是 C 语言最基础的操作之一,作用是把右边的值存到左边的变量里。

2. 编译器会先给变量 num 分配内存空间,赋值语句就是把 1 存到这块空间里,这也是变量能“变值”的原因。

3. 赋值是从右往左执行的,语句必须以分号 ; 结尾。

第四部分:C语言中的哼哈二将

一、 printf()  函数

1. 调用方式:

写 printf("内容", 参数); 就行,括号里的内容就是传给函数的参数(实参)。

2. 换行符

\n :- \n 是转义字符,代表“换行”,效果和按 Enter 键一样,但不能直接在代码里按 Enter,不然会被当成代码换行。

- 比如你写的三句 printf ,第一句没 \n ,后面两句有,所以最终只输出了两行。

3. 占位符  %d :

- 它是一个“占位标记”,告诉 printf :“在这里打印一个十进制整数”。

- 打印时会自动用后面变量的值(比如 num 的值 1 )替换掉 %d 。

4. 转义序列: 

\n 、 \t (制表符)、 \b (退格)这类以 \ 开头的字符,用来表示无法直接输入的特殊符号,后续章节会详细讲。 名字里的 f 是“formatted(格式化)”的意思,所以它叫格式化打印函数,支持小数、十六进制等多种格式输出。

二、 return  语句( return 0; )

1.  int main() 里的 int 

表示这个函数要返回一个整数,C 标准要求 main 函数这么写。

2.  return 0;

就是告诉操作系统:“程序正常执行完毕,没有出错”。

3. 就算你不写 return 0; 

大部分编译器也会默认返回 0,但强烈建议你写上,养成规范的代码习惯。

4. 除了 main()

其他有返回值的函数都必须写 return 语句,不然会报错。

0k,这篇文章就到这里了,应该让大家初步了解了一下C语言,后续也会持续推进