初识C语言

目录

1. C语⾔是什么?

2. C语⾔的历史和辉煌

3. 编译器的选择VS2022

3.1 编译和链接

3.2 编译器的对⽐

3.3 VS2022 的优缺点

4. VS项⽬和源⽂件、头⽂件介绍

5. 第⼀个C语⾔程序

6. main函数

7. printf和库函数

8. 关键字介绍

9. 字符和ASCII编码

10. 字符串和\0

11. 转义字符

12. 语句和语句分类

12.1 空语句

12.2 表达式语句

 12.3 函数调⽤语句

函数调⽤的时候,也会加上分号,就是函数调⽤语句。

12.4 复合语句

12.5 控制语句

13. 注释是什么?为什么写注释?

13.1注释第一种方法

13.2注释第二种方法


1. C语⾔是什么?

⼈和计算机是怎么进行交流的呢?自然是使用计算机能够理解的计算机语⾔。 ⽬前已知已经有上千种计算机语⾔,⼈们是通过计算机语⾔写的程序,给计算机下达指令,从而让计算机进行⼯作的。 C语⾔就是众多计算机语⾔中的⼀种,是很热门,很有历史的一种。

2. C语⾔的历史和辉煌

  C 语⾔最初是作为 Unix 系统的开发⼯具⽽发明的。

3. 编译器的选择VS2022

3.1 编译和链接

C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件(.exe),⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。 C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个 过程。

⼀个⼯程⼀般都会有多个源⽂件组成(初学者写的简单代码,通常一个源文件即可),如下图所⽰,演⽰了源程序经过编译器和链接器处理的过程。

注: 1. 每个源⽂件(.c)单独经过编译器处理⽣成对应的⽬标⽂件(.obj为后缀的⽂件)

        2. 多个⽬标⽂件和库⽂件经过链接器处理⽣成对应的可执⾏程序(.exe⽂件)

3.2 编译器的对⽐

  C语⾔是⼀⻔编译型的计算机语⾔,需要依赖编译器将计算机语⾔转换成机器能够执⾏的机器指令。 我们常⻅的C语⾔编译器有msvc、clang、gcc 等,当然也有⼀些集成开发环境如:VS2022、 XCode、CodeBlocks、DevC++、Clion等。

• VS2022 集成了MSVC(安装报包较⼤⼀些,安装简单,⽆需多余配置,使⽤起来⾮常⽅便,两者都是由微软公司提供的)

• XCode 集成了clang(苹果电脑上的开发⼯具,两者都是由苹果公司提供的)

• CodeBlocks 集成了gcc(这个⼯具⽐较⼩众,需要配置环境,不太推荐)

• DevC++ 集成了gcc(⼩巧,但是⼯具过于简单,对于代码⻛格的养成不好,⼀些竞赛使⽤,大部分高校老师在教学过程中会推荐学生使用,因为其写代码的便捷性)

• Clion 是默认使⽤CMake,编译器是可以配置的(⼯具是收费,所以暂时推荐⼤家使⽤)

3.3 VS2022 的优缺点

优点: • VS2022 是⼀个主流的集成开发环境,企业中使⽤较为普遍

            • VS2022 包含了:编辑器+编译器+调试器,功能强⼤

            • 直接安装就能使⽤,对于一般新手,基本不⽤额外配置环境,上⼿容易

            • 默认界⾯是中⽂的,初学者友好

缺点: • 功能丰富,安装包⼤,占⽤空间多。

4. VS项⽬和源⽂件、头⽂件介绍

在VS上写代码,我们是需要创建项⽬的,直接新建项⽬就可以(C语言项目直接用空项目即可)。 在项⽬中就可以添加源⽂件和头⽂件。 C语⾔把 .c 为后缀的⽂件称为源⽂件,把 .h 为后缀的⽂件称为头⽂件。(具体下载使用方法见B站鹏哥C语言,附链接)VS2022安装使用教程,Visual Studio 2022详细安装使用调试教程C语言编译器,C++编译器_哔哩哔哩_bilibili

5. 第⼀个C语⾔程序

对于大部分初学者而言,第一个C语言程序,大都是向世界问好,而这一程序,也毫无疑问也给了我们一个C语言输出的基本框架,包括库函数,头文件,main函数,返回值,返回类型等等,值得我们认真记忆,具体涉及细节下文会再次强调。

6. main函数

每个 C 语⾔程序不管有多少⾏代码,都是从 main 函数开始执⾏的, main 函数是程序的⼊⼝, main函数也被叫做:主函数。 main 前⾯的 int 表⽰ main 函数执⾏结束的时候返回⼀个整型类型的值。所以在 main 函数的最后写 return 0; 正好前后呼应。

• main函数是程序的⼊⼝

• main函数有且仅有⼀个

• 即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)

第⼀次写代码,⼀些常⻅的错误总结:

• main 被写成了mian

• main后边的()漏掉了

• 代码中不能使⽤中⽂符号,⽐如括号和分号

• ⼀条语句结束后,有分号

7. printf和库函数

代码中使⽤了 printf 函数,实现了在屏幕上的信息的打印。 这⾥简单的介绍⼀下 printf , printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上⾯的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放 在双引号中并传递给printf函数就可以打印。 printf函数也可以⽤来打印其他类型的数据,⽐如:

 上图的%d,%c,%f都是占位符,大家可以理解为这个符号替逗号后面的占住位置,最后在前面所讲的编译环节被替换,同时不同占位符决定不同的打印形式。

当我们调用库函数的时候,是需要包含头⽂件的,⽐如: printf 函数需要包含的就是 stdio.h 这个头⽂件, 具体的⽅法就是:

 为了不再重复实现常⻅的代码,避免文件冗杂,让程序员提高开发效率,C语⾔标准规定了⼀组函数,这些函数组成了⼀个函数库,被称为标准库,这些函数也被称为库函数。库函数由编译器厂商根据C语言标准进行实现,最后提供给程序员使用,所以哪怕是同一个库函数,不同编译器的实现代码也不一定完全相同。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函数其他编译器不⼀定⽀持,从而提高该编译器的竞争性)。⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。

8. 关键字介绍

C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键 字。

• 关键字都有特殊的意义,是保留给C语⾔使⽤的

• 程序员⾃⼰在创建标识符的时候是不能和关键字重复的

• 关键字也是不能⾃⼰创建的。

C语⾔的32个关键字如下:

auto         break         case           char           const       continue default        do         double     else            enum         extren         float          for         goto            if      int        long         register    return         short          signed        sizeof        struct    switch         typedef        union    unsigned  void           volatile         while

本篇中关键字是以26英文字母顺序排列,在记忆过程中可以根据具体功能记忆,而关键字具体功能之后会单发一篇文章具体讲述,并配上代码解析。

9. 字符和ASCII编码

我们可以在键盘上敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:'a','b','@'(也只有被单引号括起来才叫字符,如字母a,没有被单引号括起来叫做标识符)。首先, 我们要知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆ 进制存储的呢?假设我们每个⼈⾃⼰给这些字符中的每个定⼀个⼆进制序列,那么,我们一起在做某一个项目时,使用同一个字符就会变的很混乱,很麻烦了。为了⽅便⼤家相互通信,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C语 ⾔中的字符就遵循了 ASCII 编码的⽅式。

下图为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个字符是不可打印字符,⽆法打印在屏幕上观察

上图打印结果均为100,若占位符换成%c,则打印结果是均是d。

我个人感觉'd'和100的差别,其实是对人而言【人视觉上看到它们长得不一样(手动狗头)】,但对于电脑而言,由于ASCII值的缘故,两者是用同样的二进制值存储的(还记得前面加粗的黑体吗?计算机中所有的数据都是以⼆进制的形式存储的),而打印出来时,是根据你所选择的打印方式(即和你所选择的占位符决定的),也就是说不管是字符'd',还是数字100,用同一种方式打印出来的结果都相同。最后,就是在计算机中a是标识符,相当于变量名,而'a'才是字符,即前文另一个加粗黑体,也只有被单引号括起来才叫字符,如字母a,没有被单引号括起来叫做标识符

下面是一个简单地打印可打印字符的代码

如果我们去打印不可打印的字符,就会出现如下图结果。(一个小矩形)

10. 字符串和\0

上面介绍了字符,那么字符连起来组成的字符串在C语言中又是怎么表示的呢?使⽤双引号括起来的⼀串字符就被称为字符串,如:"abcdef",就是⼀个 字符串。

字符串的打印格式可以使用%s来指定,也可以直接打印如下图

对于字符串"abcdef",我们看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个 \0 的 转义字符, \0 是字符串的结束标志。所以我们在使⽤库函数 printf() 打印字符串或者 strlen() 计算字符串⻓度的时候,遇到 \0 的时候就⾃动停⽌了。 (但是用sizeof计算就可以求出'\0',下图可以起到证明作用,大家也可以敲一下代码,看一下sizeof和strlen的区别)

C语⾔中也可以把⼀个字符串放在⼀个字符数组中,我们在这⾥利⽤下⾯的代码验证⼀下 \0 的功能。 

 大家可以看到在arr1的打印结果后面除了a,b,c之外还有一串随机值,但是arr2打印结果却并未出现这样的情况,为什么呢?这与上面提到的'\0'是字符串结束的标志有关,即'\0'的存在,使电脑默认该字符串打印结束,停止打印,arr2使用字符串进行初始化,而字符串末尾隐藏了一个'\0',所以对于arr2而言,里面是含有'\0'的且就在c之后。但是对于arr1而言,由于用一个个字符进行初始化,就不存在'\0',那么电脑在打印过程中就会一直向后寻找'\0',所以在找到之前就会打印一堆随机值,当然打印个数也随机,因为没人知道离它最近的'\0'在哪儿。

看看上面的代码及其运行结果,都是打印到 \0 的时候就停⽌了,那么通过这个例⼦我想大家应该能更清晰认识到\0 的作⽤和重要性了。

11. 转义字符

其实我在最开始学习时对于前⾯的代码中你看到 \n , \0 很纳闷是啥。其实在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。

⽐如:我们有字符 n ,在字符串中打印的时候⾃然能打印出这个字符,如下:

 但是如果我们在n前面加上\,代码就会发生如下变化:

 朋友们可以清楚地发现两行代码所产生的结果是不同的:f转到下一行,n竟然不见了(手动狗头)

这就是转义字符的问题, \n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思 发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。(当然既然是转义,那么意味着意思发生改变,原有意思就消失了,即n不见了)

C语⾔中像这样的转义字符还有⼀些,具体如下:

• \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。

• \' :⽤于表⽰字符常量'

• \" :⽤于表⽰⼀个字符串内部的双引号

• \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。

• \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。

• \b :退格键,光标回退⼀个字符,但不删除字符。

• \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。

• \n :换⾏符。

• \r :回⻋符,光标移到同⼀⾏的开头。

下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式

• \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X

• \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0

\0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其 ASCII码值是0.

下图是部分的代码演示:

 大家感兴趣的话,可以点击下面链接

转义字符参考:https://zh.cppreference.com/w/c/language/escape

12. 语句和语句分类

C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:

• 空语句

• 表达式语句

• 函数调⽤语句

• 复合语句

• 控制语句

12.1 空语句

空语句是最简单的,⼀个分号就是⼀条语句,是空语句。

客观来说,空语句并没有太多实际意义,只是用在某处需要语句,而该语句不需要做任何事的情况。

12.2 表达式语句

表达式语句就是在表达式的后边加上分号。

下面图片就是上面的代码展示

 12.3 函数调⽤语句
函数调⽤的时候,也会加上分号,就是函数调⽤语句。

 

12.4 复合语句

复合语句其实就是前⾯讲过的代码块,成对括号中的代码就构成⼀个代码块,也被称为复合语句。

 

12.5 控制语句

控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语⾔有九种控制语句。

可分成以下三类:

1. 条件判断语句也叫分⽀语句:if语句、switch语句;

2. 循环执⾏语句:do while语句、while语句、for语句;

3. 转向语句:break语句、goto语句、continue语句、return语句。 后期会给⼤家⼀⼀介绍控制语句。 

后面会出一篇文章,专门介绍这些语句。

13. 注释是什么?为什么写注释?

注释是对代码的说明,编译器在编译时会无视注释,也就是说,注释对实际代码的实现没有影响。 注释是给程序员⾃⼰,或者其他程序员看的。 好的注释可以帮我们更好的理解代码,在后续回顾中找回原来的思路和理解,但是也不要过度注释,不要写没必要的注释。 当然不写注释可能会让后期阅读代码的⼈抓狂,听好多人说当大家一起写代码时,不写注释的人是不道德的。故 写注释⼀定程度上反应了程序作者的素质,建议⼤家写必要的注释,在未来找⼯作的时候,写代码时留下必要的注释也会给⾯试官留下更好的印象。

C 语⾔的注释有两种表⽰⽅法。

13.1注释第一种方法

第⼀种⽅法是将注释放在 /*...*/ 之间,内部可以分⾏。

这种注释可以插在⾏内。

/**/ 的这个注释也不⽀持嵌套注释, /* 开始注释后,遇到第⼀个 */ 就认为注释结束了。所以无论前面有几个/*,在遇到*/时,则从第一个/*到*/均为注释部分了。  

13.2注释第二种方法

第⼆种写法是将注释放在双斜杠 // 后⾯,从双斜杠到⾏尾都属于注释。

这种注释只能是单⾏,可以 放在⾏⾸,也可以放在⼀⾏语句的结尾。这是 C99 标准新增的语法。

不管是哪⼀种注释,都不能放在双引号⾥⾯。 双引号⾥⾯的注释符号,会成为字符串的⼀部分,解释为普通符号,失去注释作⽤。

感谢鹏哥对该文章思路启发和内容的引导!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值