目录
前言
一、C语言是什么
二、C语言的发展历史
三、编译器的选择
3.1 编译和链接
3.2 编译器的对比
3.3 VS如何使用
四、main函数
五、关键字
六、字符和ASCII编码
七、字符串和\0
八、转义字符
九、注释
十、数据类型
10.1 数据类型的介绍
10.2 数据类型大小的计算
10.3 signed 和 unsigned
10.4 数据类型的取值范围
十一、变量
11.1 变量的创建
11.2 变量的分类
前言
本篇主要讨论以下问题:
1. C语言是什么
2. C语言的发展历史是怎样的
3. 源代码是如何转化成二进制指令的
4. 常见的编译器是哪几种,常见的集成开发环境又是哪些
5. 如何使用VS来写C语言代码
6. 什么是main函数,它有哪些特点
7. 关键字是什么,常见的32个关键字有哪些
8. 什么是字符,怎样写一个字符常量,ASCII编码是什么,常用的ASCII码值有哪些
10. 什么是字符串(即,怎样表示一个字符串),\0在字符串中起什么作用
11. 什么是转移字符,常见的转移字符有哪些,它们分别在什么场景下使用
12. 注释分为哪两种,两种注释的优缺点分别是什么
13. C语言中的数据类型分为哪两大类,每个大类别里面又包含哪几种
14. 对于sizeof关键字我们应该有哪些认识
15. signed 和 unsigned 它们是用于修饰什么的,它们表达的含义又是什么
16. 数据类型的取值范围在哪个文件里可以看到
17. 如何创建一个变量,变量又分为哪两类
一、C语言是什么
1. 人与人交流使用自然语言,人与计算机交流使用计算机语言,C语言就是计算机语言之一。我们可以使用计算机语言编写程序,给计算机下达指令,从而让计算机按照我们的预期去工作。
二、C语言的发展历史
1. C语言最初是作为 Unix 操作系统的开发工具而被发明的。
2. 1969年贝尔实验室的汤姆森与丹尼斯·里奇一起开发了Unix操作系统 (常见的操作系统:Windows、Linux、MacOs),Unix操作系统是用汇编语言写的,为了方便移植,汤普森发明了B语言 ,但B语言不够好,所以3年后1972年丹尼斯·里奇和布莱恩·柯林汉在B语言的基础上发明了C语言。在C语言使用成熟后,1973年Unix操作系统用C语言进行了重写,此后C语言被更加广泛地使用和流传,尤其是在各种操作系统和系统软件的开发上,后来在1988年,美国国家标准协会ANSI,正式将C语言标准化,发展直至今日。
三、编译器的选择
1. C语言代码需要编译器才能够运行起来。
3.1 编译和链接
1. 源代码转化成二进制指令的必经之路:编译和链接。
2. C语言是一门编译型的计算机语言,C语言源代码都是文本文件,文本文件本身无法被执行,必须经过编译器的编译和连接器的链接,生成二进制的可执行文件,可执行文件才能被执行。
3.2 编译器的对比
1. 常见的编译器:msvc、clang、gcc (编译器需要通过命令行的形式去编译代码)
2. 集成开发环境(IDE):VS2022、XCode、DevC++ (集成开发环境用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、链接器、调试器等工具,集成了代码编写的功能,编译功能,链接功能,调试功能等)
- VS2022 集成了 msvc 编译器 (安装包大,安装简单,无需多余配置,使用方便)
- XCode 集成了 Clang 编译器 (只有在苹果电脑上才能用)
- DevC++ 集成了 gcc 编译器 (小巧但工具过于简单,对于代码风格养成不好,一些竞赛使用)
3. 补充:VSCode 是一个编辑器(用来写代码的),只不过非常强大,可以安装各种插件来搭建C/C++的开发环境 (前端开发用得多)
3.3 VS如何使用
1. 在VS上写代码:
① 创建新项目→空项目→项目名称、位置→点击创建
② 右键单机[源文件]→添加新建项→[C++文件]→定义文件名称→点击添加
③ 按照C语言语法写代码
2. 补充1:项目名称最好有意义,不要使用中文、特殊字符
补充2:① 路径中不要包括空格,特殊字符,中文字符
② 代码的位置,要自己找一个熟悉的路径维护
(不使用中文的原因是因为,软件是外国开发的,对中文字符的支持不太好,"一个人想写bug谁都拦不住")
3. 在C语言中:(.c)为后缀的文件是源文件,(.h)为后缀的文件是头文件,(.cpp)为后缀的文件是C++的源文件 (C++包含绝大部分C语言语法,C语言极少数的语法并不包含在内,如下图)
4. (编译 -- 链接 -- 运行) 快捷键ctrl+F5
四、main函数
1. 每一个C语言项目不管有多少行代码,都是从main函数的第一行开始执行的,可以理解为main函数是程序的入口,main函数又被称为主函数。
- main函数是程序的入口
- main函数有且仅有一个 (即使一个项目中有多个(.c)文件,但main函数只能有一个,因为程序的入口只能有一个)
2. main函数的壳子:
int main()
{
return 0;
}
3. 补充1:程序中的符号都应该采用英文的。
补充2:在C语言中,正常返回返回0,异常返回返回非0。
五、关键字
1. 关键字就是有特殊意义的名称,程序员在创建标识符时名称不能与关键字相同,程序员不能自己创建关键字,只能创建标识符。(标识符≠关键字,标识符由字母、数字、下划线构成,但标识符的开头不能是数字)
2. 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
3. 在C99标准中加入了_Bool等关键字。
4. C语言关键字介绍:C 关键词 - cppreference.com
六、字符和ASCII编码
1. 在键盘上可敲出的各种符号都被称为字符,C语言中的字符常量是用单引号引起来的,如:'a'、'@'、'!' 等。
2. 数据在内存中是以二进制的形式存储的,因为计算机只能识别二进制指令,为了存放字符,美国国家标准协会ANSI出台了一个标准ASCII编码表,C语言中每个字符都有着自己的编码,在存放一个字符在内存中时,直接存放字符对应的ASCII编码值即可。
3. 传统的ASCII编码表上有128个字符,十进制编号:0~127
4. 所需掌握的ASCII码值:
① A~Z 65~90
② a~z 97~122 (大小写字母ASCII码值差32)
③ 0~9 48~57
④ \n 10
⑤ 0~31的ASCII码值对应的32个字符,是不可打印字符,无法打印在屏幕上观察
5. 用%c的形式打印字符,参数部分写ASCII码值的效果是一样的。例如:
printf("%c", 'a'); == printf("%c", 97);
七、字符串和\0
1. 使用双引号括起来的一串字符被称为字符串,如"hello world",字符串的打印格式可以用%s来指定。
2. 字符串特殊的知识点:每个字符串的末尾都隐藏着一个\0字符,这个\0是字符串的结束标志,在使用printf打印字符串或用strlen计算字符串长度时函数遇到\0就自动停止工作了。
举例:① printf("abc\0abc");在屏幕上打印的结果是abc
② char arr1[] = "abc";和 char arr2[] = {'a','b','c'};用%s打印出来的结果不同造成的 原因就是因为\0所在的位置导致的。
八、转义字符
1. 转义字符就是转变了原来意义的字符。
2. 常见的普通转义字符:
① \? :在书写连续多个问号时,为了防止它们被解析成三字母词,通常会在?前加反斜杠
② \' :在打印字符单引号时,可防止单引号与字符常量表示形式的单引号相匹配
③ \" :在字符串中含双引号时,可防止双引号与字符串表示形式的双引号相匹配
④ \\ :为了使反斜杠只是反斜杠的意思,而不被编译器误认为与后面的字符配对表示一个 转移字符,通常在输出路径时常会用到,例如:printf("c:\\test\\test.c");
3. 特殊转移字符:(可以理解为字符的8进制或16进制表示形式)
① \ddd:ddd表示1~3个八进制数字,如'\130',表示字符X,printf("%c", '\130');//打印X
② \xdd:dd表示2个十六进制数字,如'\x30',表示字符0
补充:\0:null字符,代表没有内容,ASCII码值是0,它也是\ddd的一种而已。
九、注释
1. 注释是对代码的说明,可以帮助我们更好的理解代码,注意不要注释过度。
2. 注释的两种表示形式:
① /**/:这种注释可以插在行内,int fopen(char* s /* file name */, int mode);
优点:方便一次注释多行。
缺点:不支持嵌套注释,因为/* 开始注释后,遇到第⼀个 */ 就认为注释结束了。
② //:双斜杠到⾏尾都属于注释
优点:没有嵌套注释的概念
缺点:不太方便一次注释多行 (不过开发环境提供了相关的快捷键)
3. 注意1:不管是哪⼀种注释,都不能放在双引号⾥⾯,因为双引号⾥⾯的注释符号,会成为字符串的⼀部分,解释为普通符号,失去注释作⽤。
注意2:编译时,注释会被替换成⼀个空格,所以 min/* 这⾥是注释*/Value 会变成
min Value ,⽽不是 minValue,不要在标识符内部写注释!。
十、数据类型
10.1 数据类型的介绍
1. C语言中规定了使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数,编译器只有知道了数据的类型,才知道怎么操作数据。
2. 内置类型:
① 字符型:char、[signed] char、unsigned char
② 整型:短整型:short [int]、[signed] short [int]、unsigned short [int]
整型:int、[signed] int、unsigned int
长整型:long [int]、[signed] long [int]、unsigned long [int]
更长整型(C99):long long [int]、[signed] long long [int]、unsigned long long [int]
③ 浮点型:float、double、long double
④ 布尔类型:在 C99 中引⼊了布尔类型 ,专⻔表⽰真假。
布尔类型的使⽤得包含头⽂件<stdbool.h>
布尔类型变量的取值是:true或者false
(补充:<stdbool.h>中含#define bool _Boll、#define false 0、#define true 1)
代码举例:bool flag = true,if(flag) printf("hehe");
10.2 数据类型大小的计算
1. sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof操作符数的类型⻓度的,单位是字节。
2. sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
3. sizeof(类型)、sizeof 表达式
4. sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的,但如果是类型时一定不能省。
5. sizeof 后边的表达式是不真实参与运算的,表达式的类型由赋值操作符左边的类型决定。(原因:sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。)
10.3 signed 和 unsigned
1. C语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。
2. signed 关键字,表⽰⼀个类型带有正负号,包含负值。
3. unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。
4. 对于有符号数,最高位为符号位(0正,1负)。
5. 整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。 ⽐如,16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽ unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。
6. C语言规定signed int == int;而char可能表示signed int 也可能表示unsigned int 这取决于编译器,所以当不确定char在当前环境中到底表示的是什么时,自己写代码时要写清楚。
10.4 数据类型的取值范围
1. 每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间。
2. limits.h ⽂件中说明了整型类型的取值范围。
3. float.h 这个头⽂件中说明浮点型类型的取值范围。
4. 为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤文件中定义的表示符常量。
十一、变量
11.1 变量的创建
1. 类型是⽤来创建变量的。
2. C语⾔中把经常变化的值称为变量,不变的值称为常量。
3. 变量创建的语法形式是这样的:data_type name;
4. 变量在创建的时候就给⼀个初始值,就叫初始化。
11.2 变量的分类
1. 全局变量:没有被任何⼤括号包含的变量,整个⼯程中想使⽤都是可以用的。
2. 局部变量:在⼤括号内部定义的变量,只能在⾃⼰所在的局部范围内使⽤。
3. 注意:其实当局部变量和全局变量同名的时候,局部变量优先使⽤。
本篇文章已完结,谢谢支持!!!