目录
1. 如何学好C语言
2. C语言是什么?
3. C语⾔的历史和辉煌
4. 编译器的选择
4.1 编译和链接
4.2 编译器大比拼,VS2022 脱颖而出
4.3 VS2022 优缺点大揭秘
5. VS项⽬ 和 源⽂件、头⽂件介绍
6. 第一个C语言程序
7. main 函数:程序的 “大管家”
8. printf 和库函数
8.1 printf
8.2 那什么是库函数呢?
9. 关键字的介绍
10.字符和 ASCII 编码
11. 字符串和 \0
12. 转义字符
13.语句分类
14. 注释
在编程的世界里,C 语言就像是一位低调却实力超强的武林高手,看似朴实无华,实则内功深厚。它不仅是很多其他编程语言的 “前辈”,还在操作系统、嵌入式开发等众多领域有着不可替代的地位。今天,咱们就一起揭开 C 语言的神秘面纱,看看它到底有啥魅力!
【声明】:第一章节只是简单介绍C语言的一些基本概念以及C语言的开发环境,在接下来的两个多月里,博主将持续更新C语言模块,由0基础到进阶层层递进。加油吧!各位铁汁们,上天一定会眷顾各位努力的铁汁们,相信在不久的未来,各位铁汁们都能够进入到心仪的公司去继续提升自己。
1. 如何学好C语言
在编程领域,C 语言堪称万物之源,是长远 IT 职业发展的上佳之选。作为母体语言,它是人机交互接近底层的关键桥梁。回顾 IT 行业,大致每 10 年就会经历一次变革,然而在长达 40 年的时间里,C/C++ 在 TIOBE 排行榜中始终稳居前三,地位坚如磐石,可谓是经典永不过时。
若想学好一门计算机语言,努力是必不可少的要素。倘若总是循规蹈矩,走和他人相同的学习路径,又怎能脱颖而出呢?所以,需要付出与众不同的努力。
时间如同海绵里的水,只要你愿意去挤,总会有的。在学习 C 语言的过程中,遇到问题应先尝试自行解决,若实在无法攻克,再借助 AI 软件查询。
学好编程,绝不仅仅是掌握一门语言这么简单,还需深入学习数据结构、计算机网络、操作系统等相关知识。在闲暇时光,阅读一些计算机领域的优质书籍,有助于修炼 “内功”,让自己对知识的掌握更加精湛。
最主要的一点,多敲代码,多敲代码,多敲代码!!!重要的事情说三遍,想要算法写的好,唯手熟尔。
2. C语言是什么?
咱们日常交流用的是汉语、英语这些自然语言,那人和计算机交流靠什么呢?答案就是计算机语言。C 语言就是众多计算机语言中的一员,像我们熟悉的 C++、Java、Python 等也都属于这个大家族。它就像是计算机能听懂的 “方言”,通过编写 C 语言程序,我们就能给计算机下达指令,让它乖乖干活。
3. C语⾔的历史和辉煌
C 语⾔最初是作为 Unix 系统的开发⼯具⽽发明的
4. 编译器的选择
4.1 编译和链接
C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。
C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个过程。
简单来说,编译就是把我们写的代码翻译成计算机能懂的 “机器语言”,每个以.c 为后缀的源文件会单独被编译器处理,生成对应的目标文件(.obj 后缀)。然后,链接器会把这些目标文件和库文件 “组装” 起来,生成最终的可执行程序(.exe 文件),这就好比把各种零件组装成一台能正常运转的机器。
⼀个⼯程⼀般都会有多个源⽂件组成,如下图所⽰,演⽰了源程序经过编译器和链接器处理的过程。(图有点粗糙,凑合着看吧)
这就是,在Windows电脑上C语⾔程序⽣成的exe可执⾏⽂件
4.2 编译器大比拼,VS2022 脱颖而出
常见的 C 语言编译器有 msvc、clang、gcc 等,还有像 VS2022、XCode、CodeBlocks、DevC++、Clion 这些集成开发环境(IDE)。这些 IDE 把代码编辑器、编译器、调试器、链接器等工具集成在一起,方便我们开发。
VS2022 集成了 MSVC,它安装起来很简单,不用额外配置环境,直接就能上手,对咱们初学者特别友好,而且它在企业里也用得很普遍。
XCode 主要在苹果电脑上用,集成了 clang;
CodeBlocks 和 DevC++ 都集成了 gcc,不过 CodeBlocks 需要配置环境,不太适合新手,DevC++ 虽然小巧,但功能相对简单,更适合竞赛使用。
Clion 默认用 CMake,编译器能自己配置,但是要收费。综合考虑,VS2022 社区版是咱们学习 C 语言的绝佳选择。
4.3 VS2022 优缺点大揭秘
VS2022 的优点可不少,它功能强大,编辑器、编译器、调试器、链接器一应俱全,就像一个编程 “大礼包”。安装好就能用,基本不用操心环境配置的问题,而且默认界面是中文的,对咱们来说很友好。
不过,它也有个小缺点,就是功能太丰富,导致安装包比较大,占用的空间多。但总体来说,瑕不掩瑜,还是很值得安装的。
整体考虑,推荐⼤家安装 VS2022 的社区版本学习,免费,使⽤⽅便,⼯作中常⻅。
VS2022 的安装教程:
https://www.bilibili.com/video/BV11R4y1s7jz/
(鹏哥同时也是我的C语言导师,记得我最初学C语言找了很多资料和课程,但是都学不进去,有一次打开鹏哥的课程后,我好想有了启发似得,对学C语言的热情一发不可收拾,在这里感谢比特鹏哥,同时大家想学习C语言的铁汁们也可以选择去看鹏哥哔站上的C语言课程,包能学会的)
5. VS项⽬ 和 源⽂件、头⽂件介绍
在 VS2022 里写代码,得先创建项目,这就好比盖了一栋房子。项目建好后,就能在里面添加源文件(.c 后缀)和头文件(.h 后缀)了。源文件是存放 C 语言代码的地方,是程序的 “核心战场”;头文件则像是一个 “工具库”,里面放着函数声明、宏定义等内容,方便在不同的源文件里使用。
6. 第一个C语言程序
- #include<stdio.h>
- int main()
- {
- printf("Hello World\n");
- return 0;
- }
复制代码
这就是我们的第一个 C 语言程序啦!代码里,#include 是把标准输入输出头文件 “请” 进来,这样我们就能使用里面的函数了。printf函数的作用是在屏幕上打印信息,这里它会输出 “Hello World”。main函数是程序的入口,程序从这里开始执行,最后return 0表示程序正常结束。在 VS2022 里,按下 Ctrl + F5 快捷键,就能看到程序运行的结果啦,是不是很有成就感?
7. main 函数:程序的 “大管家”
每个 C 语言程序都有且只有一个main函数,我们称他为主函数,它是程序的入口,就像房子的大门,程序从这里开始 “起航”。main前面的int表示这个函数执行结束后会返回一个整型值,所以在函数最后写return 0,这是一种规范的写法。
初学者常见的错误总结:
1.把main写mian
2.main后面的括号丢掉
3.代码中的符号都是英文符号
4.每条语句后面都会有一个 ;
8. printf 和库函数
8.1 printf
在前面的代码里,printf函数帮我们实现了信息打印。它是一个库函数,功能是在标准输出设备(一般就是屏幕上)打印信息。除了打印字符串,它还能打印各种类型的数据。
- int n = 100;
- printf("%d\n", n); // 打印整型
- printf("%c\n", 'q'); // 打印字符
- printf("%lf\n", 3.14); // 打印双精度浮点型
复制代码
这些不同的数据类型我们第一节先不具体讲解。
这里的%d、%c、%lf等是占位符,会被后面相应的值替换。使用库函数的时候,别忘了包含对应的头文件,比如用printf函数就得加上#include 。库函数是 C 语言标准规定的一组函数,由不同的编译器厂商按照标准实现,提供给程序员使用,就像是一套现成的工具,能帮我们提高开发效率。
8.2 那什么是库函数呢?
为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不
同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准
库,这些函数也被称为库函数。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函
数其他编译器不⼀定⽀持)。
⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。
库函数⽐较多,后期慢慢来介绍,提前了解可参考链接:
https://cplusplus.com/reference/cstring
9. 关键字的介绍
C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键
字。
C语言常见的关键字有32个,在后续的学习中,我们会慢慢熟悉它们的用法。
- auto break case char const continue default do double else enum
- extern float for goto if int long register return short signed sizeof
- static struct switch typedef union unsigned void volatile while
复制代码
关键字都有特殊的意义,是保留给C语⾔使⽤的
程序员⾃⼰在创建标识符的时候是不能和关键字重复的
关键字也是不能⾃⼰创建的
注:在C99标准中加⼊了
inline 、
restrict
、
_Bool
、
_Complex
、
_Imaginary
等关键字。
⼀些关键字⼤家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。
注:
https://zh.cppreference.com/w/c/keyword
(C语⾔关键字的全部介绍)
在后续的学习中,我们会慢慢熟悉它们的用法。
10.字符和 ASCII 编码
在键盘上敲出的各种符号,像a、@等,在 C 语言里都是字符,用单引号括起来表示,比如'a'、'@'。计算机里所有的数据都是以二进制形式存储的,字符也不例外。为了统一标准,方便大家交流,美国国家标准学会(ANSI)制定了 ASCII 编码,C语言中的字符就遵循ASCII编码的方式。
参考:https://zh.cppreference.com/w/cpp/language/ascii
我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据:
字符A~Z的ASCII码值从65~90
字符a~z的ASCII码值从97~122
对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
数字字符0~9的ASCII码值从48~57
换⾏ \n 的ASCII值是:10
在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
神奇吧,哈哈哈哈,a对应的码值刚好是97,打印出来一模一样
11. 字符串和 \0
在 C 语言里,用双引号括起来的一串字符就是字符串,比如"abcdef"。打印字符串可以用%s指定格式,也能直接打印。这里有个重要的知识点,字符串末尾会隐藏一个\0字符,它是字符串的结束标志。
字符串的两种打印方式
下面是 VS2022 的监视窗口,它需要在调试状态下才能打开,主要用于观察代码执行过程中变量等状态的变化。在调试时,我们通过监视窗口观察到,创建了两个数组,第一个数组存储的是'a' 'b' 'c' ,第二个数组存储的是'a' 'b' 'c' '\0'。由此,我们可以验证字符串末尾隐藏着\0 这一特性。在监视窗口中,数组会以特定的形式展示元素,方便我们直观地对比这两个数组的差异。
下面我们执行一下这段代码
运行上述代码后,我们会发现一个有趣的现象。在输出结果中,第一行出现了 “烫烫烫” 这样奇怪的内容,而第二行则正常输出了 “abc”。为什么会这样呢?
这就要提到%s的打印规则了。%s在打印字符串时,遇到\0就会停止打印。对于arr数组,我们是以字符形式初始化{'a','b','c'},并没有自动添加字符串结束符\0。所以当使用%s打印arr时,它会一直往后寻找\0,直到在后续内存空间中碰到一个\0才停止。而后续未初始化的内存空间中的值是随机的,在 Visual Studio 环境下,这些随机值打印出来就呈现为 “烫烫烫”。
反观arr1数组,我们使用字符串常量"abc"进行初始化,在 C 语言中,字符串常量末尾会自动添加\0。因此,%s在打印arr1时,能够正常识别到末尾的\0,从而正确输出 “abc”。
在实际的 C 语言编程中,正确处理字符串结束符\0至关重要。如果忽略了它,可能会导致字符串操作出现错误,比如越界访问内存,进而引发程序崩溃等严重问题。
12. 转义字符
在 C 语言里,有一些特殊的字符,它们叫转义字符,能改变原来字符的意思。比如说\n,它表示换行。
- #include <stdio.h>
- int main()
- {
- printf("abc\ndef");
- return 0;
- }
复制代码
运行这段代码,输出的结果是 “abc” 和 “def” 分在两行,这就是\n的作用。除了\n,还有很多转义字符 。
- C语⾔中像这样的转义字符还有⼀些,具体如下:
- •
- \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。
- •
- \' :⽤于表⽰字符常量'
- •
- " :⽤于表⽰⼀个字符串内部的双引号
- •
- \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
- •
- \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
- •
- \b :退格键,光标回退⼀个字符,但不删除字符。
- •
- \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。
- •
- \n :换⾏符。
- •
- \r :回⻋符,光标移到同⼀⾏的开头。
- •
- \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
- •
- \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
- 下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
- •
- \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
- •
- \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0
- \0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其
- ASCII码值是0.
复制代码
这些ASCII码值是可以⾃⼰写代码验证的,⼤家也可以⾃⼰验证。
转义字符参考:https://zh.cppreference.com/w/c/language/escape
13.语句分类
C 语言的代码是由一条条语句组成的,主要分为五类:空语句、表达式语句、函数调用语句、复合语句和控制语句。