平地起C楼—第一层《C语言见面篇》

在这里插入图片描述

前言

点进来的博客友你好!如果你是第一次听说C语言这个东西,你会对它感到陌生吗?你对它有什么了解吗?……。不瞒你说,我在进入大学之前对计算机各种东西一无所知,更别说C语言了。大一刚进校,听说第一节课就是C语言。顿时脑海想到的就是 😵😲这是啥…啥啥啥?。所以,接下来我们就去和它见一面👉🏃‍♀️。

1. C语言是什么?

我们脑海中会想到人和人之间说话用什么交流呢?这就要看你和什么人交流了,和自己人交流当然是汉语,和foreigner交流就是用英语或者他们通用的语言了。那么我想和计算机闹闹磕该用什么语言交流呢?那就得顺从计算机的路走了,用计算机语言和它交流了。

然而计算机语言有很多,C语言就是其中之一,还有像然C++/Java/Go/Python都是计算机语⾔。所以,C语言到底是什么呢?
它是 20 世纪 70 年代初期在贝尔实验室开发出来的一种广为使用的编程语言。C语言是一门面向过程的抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。它具有高级语言的特点,具有汇编语言的特点。


2. C语言的起源和发展

B语言的诞生——》1969年,贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了Unix操作系统。Unix是用汇编语言写的,为了移植到其他计算机,汤姆森就在BCPL语言的基础上发明了B语言。

C语言的诞生——》1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan),又在B语言的基础上重新设计了一种新的语言,这种语言取代了B语言,称之为C语言。

Unix系统的重写——》1973年,整个Unix系统都使用C语言重新。此后,这种语言开始快速流传,广泛应用于各种操作系统和系统软件的开发。

C语言的标准化——》1988年,美国国家标准学会(ANSI)正式将C语言标准化,标志着C语言的确定和规范化。至今,C语言一直是被广泛使用的。
C语言知名度点击此处查看


看了C语言的发展和基本特征,接下来我们前往下一处,看看用什么软件来写C语言呢?这就涉及到编译器的选择了,话不多说,咱们往下滑:


3. 编译器的选择

我们为什么要选择编译器呢?主要原因是C语⾔作为编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。如果不进行编译,C语言只是一堆英文单词符号,计算机是不懂的。所以接下来,我来说一说有哪些编译器?该如何选择?

3.1 编译和链接

在计算机语言中,大致可以分为解释型语言(如:Python)和编译型语(C/C++)。 然而,通过字面意思可以知道编译型语言是需要通过编译(翻译)的。首先C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个过程。在文件中呈现的是下图的样子:

在这里插入图片描述
在这里插入图片描述

  • 每个源⽂件(.c)单独经过编译器处理⽣成对应的⽬标⽂件(.obj为后缀的⽂件)
  • 多个⽬标⽂件和库⽂件经过链接器处理⽣成对应的可执⾏程序(.exe⽂件)

3.2 编译器的对比

我们常见的编译器有哪些?
比如:msvc、clang、gcc等常见的编译器,也有一些集成开发环境的软件如:VS2022、XCode、CodeBlocks、DevC++、Clion等。

【集成开发环境(IDE)用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器、图形用户界面等工具,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发环境】

VS2022——》集成了msvc(安装包较大、但安装简单、不需要多余配置、使用起来方便)。

XCode——》集成了clang(苹果电脑上的开发工具)。

CodeBlocks——》集承了gcc(工具比较小众、需要多余配置)。

DevC++——》集成了gcc(小巧、简单、一般用于竞赛)。

Clion——》是默认使用CMake,编译器是可以配置的(需要收费)。
整体考虑,推荐⼤家安装 VS2022 的社区版本学习,免费,使⽤⽅便,⼯作中常⻅。

vs2022优缺点—》
优点:
• VS2022 是⼀个主流的集成开发环境,企业中使⽤较为普遍
• VS2022 包含了:编辑器+编译器+调试器,功能强⼤
• 直接安装即可使⽤,基本不⽤额外配置环境,上⼿容易
• 默认界⾯是中⽂的,初学者友好
缺点:
• 功能丰富,安装包⼤,占⽤空间多。


4. 第一句C语言程序“Hello Word!”

#include<stdio.h>
int main()
{
	printf("Hello Word!");
	return 0;
}

4.1 main()函数

main()函数是程序的入口。称之为——主函数,该该函数会返回一个整形的数据。

  • ①main容易写成mian,敲代码的时候小心。
  • ②main()函数有且仅有一个,代码书写中不能书写多个main()函数。
  • ③在多个xxx.c源文件中,也不能有多个main()函数

【注:①main 被写成了mian;②main后边的()漏掉了;③代码中不能使⽤中⽂符号,⽐如括号和分号;④⼀条语句结束后,有分号】

4.2 printf()函数

  • 在上面代码块中有这么一句代码:
printf("Hello Word!\n");

勒个代码是个啥东西呢?我来简单解释一下:

代码中使⽤了 printf 函数,实现了在屏幕上的信息的打印。
这⾥简单的介绍⼀下 printf , printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上⾯的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给printf函数就可以打印。
【使用它的前提就必须包含下面代码块中的头文件:】

#include<stdio.h>

4.3 库函数

  • 在上面所说的库函数是什么呢?简单介绍一下:

库函数是指:为了不再重复实现常见的代码,让程序员提高开发效率,C语言标准规定了一组函数,这些函数再由不同编译器厂商根据标准实现,提供给程序员,这些函数就组成了一个函数库,称之为标准库。因此,里面的函数就成为库函数。
一系列的库函数一般会声明在同一个头文件中,在使用库函数时候记得引对应的头文件。库函数很多,此处有个链接包含一些库函数的头文件和解释:
C语言库函数链接


5. C语言关键字

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

关键字都有特殊的意义,是保留给C语⾔使⽤的
程序员⾃⼰在创建标识符的时候是不能和关键字重复的
关键字也是不能⾃⼰创建的。

C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。接下来详细介绍关键字:

  1. 数据类型关键字(12个);
  2. 控制语句关键字(12个);
  3. 存储类型关键字(4个);
  4. 其它关键字(4个);

注:在C99标准中加⼊了 inline 、 restrict 、 _Bool 、 _Complex 、 _Imaginary 等关键字。
C语言全部关键字介绍链接

5.1 数据类型关键字(12个):

关键字作用
char声明字符型变量或函数
double声明双精度变量或函数
float声明浮点型变量或函数
int声明整型变量或函数
long声明长整型变量或函数
short声明短整型变量或函数
signed声明有符号类型变量或函数
unsigned声明无符号类型变量或函数
enum声明枚举类型
struct声明结构体变量或函数
union声明共用体(联合)数据类型
void声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

5.2 控制语句关键字(12个):

循环语句:

for:一种循环语句(可意会不可言传)
do :循环语句的循环体
while :循环语句的循环条件
break:跳出当前循环
continue:结束当前循环,开始下一轮循环

条件语句:

if: 条件语句
else :条件语句否定分支(与 if 连用)
goto:无条件跳转语句(基本上用的很少)

开关语句:

switch :用于开关语句
case:开关语句分支
default:开关语句中的“其他”分支

返回语句:

return :子程序返回语句(可以带参数,也看不带参数)

5.3 存储类型关键字(4个):

  • auto :声明自动变量 一般不使用
  • extern:声明变量是在其他文件正声明(也可以看做是引用变量)
  • register:声明寄存器变量
  • static :声明静态变量

5.4其它关键字(4个):

  • const :声明只读变量
  • sizeof:计算数据类型长度
  • typedef:用以给数据类型取别名(当然还有其他作用
  • volatile:说明变量在程序执行中可被隐含地改变

6. 字符和ASCII码表

  • 键盘上可以敲出各种字符:a,s,@等,这些都可以叫字符。重要的是在C语言中字符使用单引号(英文状态下)括起来的,如:‘a’, '@'等。然而,在计算机中所有数据都是用二进制形式存储的,那么问题来了——这些字符在内存中分别是用什么二进制存储的呢?因此,为了方便大家对它们进行相同样式的使用,美国国家标准学会(ANSI)出台了一个标准ASCII编码,C语言就遵循这样的编码存储。单个字符用%c打印。

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

下面是单个字符代码展示:

#include<stdio.h>
int main()
{
	printf("%c\n", 'Z');//输出Z
	printf("%c\n", 90);//ASCII码值和Z对用的,所及输出Z
	return 0;
}

下面是打印字符代码展示:

#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 32; i <= 127; i++)
	{
		printf("%c ", i);
		if (i % 16 == 15)
			printf("\n");
	}
	return 0;
}

在这里插入图片描述


​7. 字符串和 \0

字符串就是由双引号引起来的那一部分,可以包含单个字母、英文语句、中文等。它和单个字符的主要区别就是👉:字符用单引号、字符串用双引号。字符后面没有’\0’、字符串在末尾有’\0’。

打印字符串用%s打印。
printf()函数和strlen()函数分别在打印字符串和求字符串长度的时候遇到’\0’就停止

  • 代码展示如下👇👇👇:

对于字符串"hello word",我们实际上看到了10个字符:h,e,l,l,o, 有一个空格,w,o,r,d但是实际上在末尾还隐藏⼀个 \0 的转义字符, \0 是字符串的结束标志。所以我们在使⽤库函数 printf() 打印字符串或者strlen() 计算字符串⻓度的时候,遇到 \0 的时候就⾃动停⽌了。C语⾔中也可以把⼀个字符串放在⼀个字符数组中,我们用代码来展示👌👌👌:

#include<stdio.h>
int main()
{
	char arr1[] = { 'h','e','l','l','o',' ','w','o','r','d'};
	char arr2[] = "hello word";
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	return 0;
}

这段代码我们通过调试来观察他们的区别📺📺📺:

在这里插入图片描述

很明显看到😳😳😳, arr1 字符数组在打印的时候,打印了h,e,l,l,o, 有一个空格,w,o,r,d 后还打印了⼀些随机值,这就是因为 arr1 在末尾的地⽅没有 \0 字符作为结束标志,在打印的时候没有停⽌。
但是 arr2 的打印就是完全正常的,就是因为 arr2 数组是使⽤字符串常量初始化的,数组中有 \0作为结束标志,打印可以正常停⽌。

  • 如果我们在arr1数组中单独放⼀个 ‘\0’ 字符会怎么样呢?👀👀👀👀
#include<stdio.h>
int main()
{
	char arr1[] = { 'h','e','l','l','o',' ','w','o','r','d','\0'};
	char arr2[] = "hello word";
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	return 0;
}

在这里插入图片描述

看到这两次打印的结果是⼀样的了,都是打印到 \0 的时候就停⽌了,所以从上述的例⼦我们确实能够观察到 \0 的作⽤和重要性。


8. C语言转义字符

是不是你们在代码中看到 \n , \0 ,\t等东西会觉得奇怪,勒个是个啥?😲😲😲。其实在C语言中由一组特殊的字符, 它们叫作转义字符,也就是字面意思【转变原来的意思的字符。】

⽐如:我们所看到的字符 n ,在字符串中打印的时候⾃然能打印出这个字符,如下:
在这里插入图片描述

要是我们修改⼀下代码,在 n 的前⾯加上 \ ,变成如下代码:
在这里插入图片描述

  • 我们可以看到修改的前后代码输出的结果,截然不同的,那这是为什么呢?这就是转义字符的问题, \n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思发⽣了转变,在编译器上可以看出颜色发生了变化, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思

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

  • \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。
  • \’ :⽤于表⽰字符常量’
  • \ " :⽤于表⽰⼀个字符串内部的双引号
  • \\:⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
  • \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
  • \b :退格键,光标回退⼀个字符,但不删除字符。
  • \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。
  • \n :换⾏符
  • \r :回⻋符,光标移到同⼀⾏的开头。
  • \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数,相当于键盘的Tab键。
  • \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。

下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
• \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
• \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0
\0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其ASCII码值是0.

C语言转义字符链接

  • 代码演示👉👉👉👉:
//C语言转义字符代码

#include<stdio.h>
int main()
{
	printf("%c\n",'\'');
	printf("%c\n",'\"');
	printf("%s\n","c:\\test\\code\\test.c\n");
	printf("c:\\test\\code\\test.c\n");//和上面一行结果一样的
	printf("\a");//警报声音
	printf("%c\n",'\130');//X
	printf("%c\n",'\x30');
	return 0;
}

结果如下👇👇👇👇:
在这里插入图片描述


9. C语言语句

  • 我们从以上的代码可以看出C语言就是一条一条的代码组成的,这每一条以分号结尾的就叫作一条语句,在C语言中语句也可以大致分为五大类👇:

1.空语句
2.表达式语句
3.函数调⽤语句
4.复合语句
5.控制语句

9.1 空语句

空语句是最简单的,⼀个分号就是⼀条语句,是空语句。
代码如下所示📺📺📺:

#include<stdio.h>
int main()
{
	;//在分号前面没有任何东西就是空语句
	return 0;
}
  • 空语句,⼀般出现的地⽅是:这⾥需要⼀条语句,但是这个语句不需要做任何事,就可以写⼀个空语
    句。

9.2 表达式语句

表达式语句,字面意思就是一个可以计算的式子,在这个式子后面加一个分号就是表达式语句。
代码如下所示👇👇👇:

#include<stdio.h>
int main()
{
	int a = 10;//定义变量
	int b = 20;
	int c = 0;
	c = a + b;//表达式语句
	return 0;
}

9.3 函数调用语句

就是在函数调用后面加分号。
✍✍✍:

#include<stdio.h>

int add(int x, int y)//函数定义
{
	return x + y;
}

int main()
{
	//打印函数也是调用语句
	printf("你好呀!\n");//函数调用语句,只不过是调用的库函数
	int ret = arr(10, 20);//函数调用语句,调用自定义的函数
	return 0;
}

9.4 复合语句

复合语句不用多说,就是用大括号括起来的就叫做复合语句,也就是所说的代码块。代码展示省略。

9.5 控制语句

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

  1. 分⽀语句:if语句、switch语句;
  2. 循环语句:do……while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

10. C语言注释

首先,注释是什么???在C语言中,它好比就是高中古文下面的解释,每个解释对应一个序号,在代码中也有解释,叫作注释。主要是对代码的说明,在编译器中注释是会被忽略的,不会执行。写了注释既方便自己理解,又方便其他程序员理解。当然,凡事都得有个度,注释过多,会让代码更乱。所以,不必要的注释,尽量不用写。

10.1 注释的两种格式

  1. /* xxxxx*/ 的形式。
  2. // xxxxx的形式。

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

  • 以上就是这一层的全部内容,若有误的地方,希望各位大佬指正,因为希望得到各位的支持🤞🤞🤞🤝,谢谢!
  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值