目录
前言
在上一篇文章中我详细介绍了C语言中的启蒙代码—Hello Word!中各语句的具体用途与常见错误,前文的目的就是带大家进入C的世界,而本文就是带大家正式在C的世界中远航,让梦启程,争取以后能拿到满意的offer!
注意:图片中代码的头文件位于文件最顶部,因截图无法截取,所以默认已引头文件
正文
本文的目的就是带着大家把C语言中的知识点都过一遍,让大家对C语言有一个立体的认识,后面再对具体的知识点展开详细讲解,所以本文的知识点可能会有点多。秉持着通俗易懂的理念,文中提到的知识都会尽可能简单,配图讲解也会更加详细,争取做到一点就通,点到为止。
数据类型
在C语言中有许多数据类型,这些数据类型有着不同的大小和功能,目的就是将数据分档次,使用起来更方便(对号入座)。可能大家没什么概念,就拿我们日常生活举例,比如我们的人民币,分一元、五元、十元、二十元、五十元和一百元这几个档次(可能大家已经好久没见过纸币了),当购买一根雪糕时,使用五元或十元进行结算即可,没必要使用更高的面额(可能有人想说雪糕刺客),将价格对应存储到我们C语言中,int是4个字节(4个字节存储范围为-2^31~2^31,很大了已经),而long则是4~8个字节,当int储存不了时就需要使用long,就像是遇到雪糕刺客需要面额更大的五十元。
上面的例子只是纵向说明了数据类型的差异,关于float单精度浮点型和double双精度浮点型呢?因为所谓的浮点型就是用来表示小数部分的,也就是精度,其实我们依旧可以用人民币的例子,比如某多多商品价格喜欢标9.9或19.9,这时如果想把这个价格存储在C语言中就需要用到float单精度浮点型,即float price=9.9f; float在使用时需要在数字后面加上f,不加的话默认为double型,关于float的存储范围(即精度范围)—8位有效数字,double就更精准了。
关于float更详细的介绍:float的精度和取值范围_AlbertS的博客-CSDN博客_float精度
最后再来说说字符型,这个不同于前两个不只能表示数字,还能表示英文字母和特殊符号,经过后续的迭代,现在甚至能表示中文(以字符串的形式储存,一个中文两个字节)这是因为char有ASCII码的帮助(美国信息交换标准代码),在ASCII码中,不同的数字有着不同的含义,比如65表示A,97表示字母a,char的大小是1个字节,这是很精准的(相较于上面的数据类型),在后面进行指针操作时,char*能做到只移动一个字节,手术刀般访问内存。
以上就是各数据类型的介绍,大概能看懂就行了。接下来我将用代码的形式再次介绍各数据类型
下面我将给大家介绍各数据类型对应的格式
了解基本格式后,我们现在通过代码来说明各数据类型所占的内存大小
漏了个短整型,格式是%hd——短整形(short),大小是2个字节,用的比较少
//注意:sizeof是库函数,可以计算指定量大小
int main()
{
printf("%d\n", sizeof(int));//4
printf("%d\n", sizeof(long));//4~8
printf("%d\n", sizeof(long long));//8
printf("%d\n", sizeof(float));//4
printf("%d\n", sizeof(double));//8
printf("%d\n", sizeof(char));//1
return 0;
}
常见错误
数据类型没多知识,只要知道基本的类型大小和输出格式就可以使用了
变量
所谓变量就是可变的量,比如我们的年龄、成绩、工资,这些都是可以根据现实情况而改变的量,在我们C语言中,常常需要这样的变量来进行运算赋值,而变量都是我们自己命名的,为了避免混乱,C语言标准就规定了一些变量命名规则
命名规则
1.只能由字母(包括大小写)、数字、下划线组成
2.不能以数字开头
3.长度不能超过63个字符
4.变量名中区分大小写,比如abc和ABC不同
5.变量名不能使用C标准已经预设好的关键字,比如sizeof
分类
我们将变量分为了全局变量和局部变量
全局变量是指作用于全局(整个工程的变量),通常写在函数体之外(包括主函数)或者通过#define进行宏定义。全局变量的作用域是整个工程,生命周期则是整个程序。全局变量是一个比较危险的变量,因为范围太大,因此我们前期尽量使用局部变量。
局部变量就是指在一个局部内定义的变量,这种变量一般只能在被定义的局部范围内使用,局部变量通常出现于函数体内部(包括主函数)或者在函数之内的有一层{ }内部。局部变量的作用域是变量所在的局部范围,生命周期则是进入作用域开始,出作用域结束。局部变量虽说能力比较有限,但是比较安全,适合前期学习使用。
注意
当全局变量与布局变量命名一致即起冲突时,局部变量优先,但局部变量的改变并不会对全局变量造成影响
常量
常量是变量的对立面,即不能被改变的量,比如我们高考分数、圆周率、身份证号码等,C语言中常量的主要作用是直接输出或作为判断依据,一般我们常量出现于以下几个场景。
分类
1.字面常量,这个就是很普通的常量,比如数字100、数字3.14、字母 a等
2.const修饰的常变量,const是常量的意思,将其放在变量定义前,即可将变量锁定为常变量,本质上还是变量。比如 const int age=18,这样表示永远18岁,将其保护起来,一般的赋值方法无法更改值,只能通过指针找到地址的方式改变值。
3.#define定义的标识符常量,这个是一个宏定义,作用于整个工程,还可以解决C4996问题
4.枚举常量,这个常量前期比较少见,关键字是enum,但他本质上是常量,枚举的意思就是一个一个数出来,从0开始
//4.枚举常量
enum Sex
{
man,
woman,
secret
};
int main()
{
enum Sex s = man;
enum Sex e = woman;
enum Sex x = secret;
printf("%d %d %d\n", s, e, x);
return 0;
}
字符串
字符串就是由一串字符组成的串,比如字符H、e、l、l、o串在一起就组成了Hello这个字符串;字符串的结束标志是 \0 ,在C语言中我们的中文是以字符串的形式存储的,需要用到字符数组,空间尽量分配大一些,一个汉字就相当于两个英文字母,换句话说一个汉字占2个字节大小的空间。
\0 是字符串的结束标志,也是字符串的主要特征
转义字符
转义字符,顾名思义就是转变原意的字符,比如我们常见的 \n 在转义字符中表示换行,常常用在printf 中,使打印出来的内容更加清晰;还有比如 \' 表示单个英文单引号 ' ,即我们在想打印 ' 时使用,避免自动与其他单引号组合造成错误;再比如 \xxx ,xxx表示1~3个八进制数字,在数字前加上 \ 后会被编译器当作八进制数字处理,譬如 \130 ,转换成十进制后表示88,对应ASCII码表就是X。
其实在C语言中有许多转义字符,下面就是转义字符汇总表:
因篇幅原因就不一一展示用法 。
注释
注释的存在就是屏蔽代码或解释代码,当我们需要在同一个文件中写入第二个主函数时就可以把前面的注释掉,或者把其他无用的代码注释掉;当我们在写一些比较难理解的代码时也可以加上注释,通过文字提示帮助我们理解代码。
C语言中有两种注释风格,一种是C语言的(/* */),另一种是C++的( // )。因为C++的注释方法快捷高效,且C语言的注释风格不能嵌套注释,于是C语言就兼容了C++的注释风格,当然两者都可以使用,因地制宜才能发挥注释的最大价值。
关于注释:代码在编译过程中会将注释部分自动删除,因此注释丝毫不影响代码运行。
C语言的注释风格
C++的注释风格
关于注释的快捷键,Ctrl+K+C进行注释,Ctrl+K+U取消注释
选择语句
选择语句,就是让程序做出选择的语句。人生就像是一颗大树的攀爬史,不同的选择会让我们走上不同的路径,无论快慢,路上的风景都是最美的,因为我们的终点都将归于死亡,飘落树间,埋于土地。在C语言中,不同的选择会造成不同的结果,比如变量age在自增的过程中达到了临界点,就是执行下一条语句,即if(age>=18) printf("成年,可以进网吧");
选择语句主要有if语句和switch语句
if语句
if语句分为单分支和多分支,且if语句可嵌套,作为if语句的搭档,else常常会自动和最近的上一个if语句匹配,若程序编写不当则会造成else悬空的状态
if 单分支
if 多分支
if 语句嵌套使用
else 悬空
switch 语句和 if 语句完全不一样,所涉及到的知识也比较多,因此我们在下篇博客详细介绍
循环语句
水的一生就是从蒸发到滴落,再重新蒸发,循环往复。正是因为大自然的鬼斧神工,创造出水循环这一奇迹,才让我们地球生机勃勃,由此可见循环的重要性。所谓量变引起质变,做一件事不是做不成,而是做不够,就像学习编程一样,日复一日,才能成为大牛,在C语言中循环有三种:while、do while和 for 循环,这里我们先介绍while循环。
while 循环
函数
C语言中函数在维基百科中的定义是子程序,具有相对独立性。函数是我们用来实现功能的工具,具体使用函数步骤可以分为:设计函数、编写函数、封装函数、使用函数、实现需求
下面我将展示一个简单的add函数,实现两数相加的功能
函数的特点是简化代码,代码复用,实现模块化运行。
数组
数组就是一组相同类型元素的集合,通常使用下标来寻找数组中的具体元素,下标从0开始,数组名则表示数组首元素地址。将数组看作寝室,寝室号看作地址,学生看作元素,所以寝室楼A就表示第一个寝室号101(地址),对比着理解,数组就是这样。
操作符
我们常常说C语言强大且灵活,得益于丰富的操作符和关键字,使得它能实现众多需求,比如编写其他语言、解决物理学和工程学问题、制作电影的动画特效等。C语言中有大概32个关键字、34种操作符,这么庞大的数量不可能一一介绍完,因此我会挑几个介绍,关于其他关键字,如果想了解的话,可以参考我以前的文章,专门有详细介绍这些操作符。
先带大家简单认识操作符
再带大家简单了解一些都有哪些操作符
关键字
同操作符一样,关键字的种类也是非常之多,同样的在这里我挑几个出来讲讲,再给大家看看C语言标准库都定义了哪些关键字,这样以后在命名的时候就能避开这些关键字了。
typedef
static
总结:static在修饰局部变量时会增长其生命周期;而在修饰全局变量或函数时会破坏其外部链接属性,使其不能被随意使用
#define定义常量和宏
define是个很好用的工具,它能给我们定义能全局使用的常量,或者各种宏来完成运算
指针
有人说C语言的精髓在于指针,因为指针就是地址,而又能访问内存的每个单元,从而进行操作,这种编写深度是其他语言无法做到的,但是能力越大,责任也就越大,我们也常常抱怨指针难、指针容易犯错,但只要功夫到家,操作得当,你就能玩转C语言。
关于指针的文章我以前也写过,感兴趣的同学可以点击链接传送:
初步认识指针——指针初阶_Yohifo.的博客-CSDN博客
结构体
结构体主要用于复杂事物的描述,比如一本书包含书名、价钱、书编号,这些变量类型又各不相同,因此需要一种“模板”来存放这些数据,这时结构体就出现了。
总结
在本文中给大家介绍了C语言的大概知识框架,即数据类型、变量&常量、字符串&转义字符&注释、选择语句、循环语句、函数、数组、操作符、关键字、#define、指针与结构体。作为入门级文章,本文没有做过多展开,日后会从这些点出发,继续介绍其用法,希望各位能够多多支持!
梦想系列旨在通过详细的讲解和生动的配图理清知识,吸收并为我所用,如果是刚开始或准备学习C语言的同学可以关注这个系列(专栏),让我们共同学习,离梦想更进一步!
希望各位大牛能够及时指出我文中存在的不足和错误,我好加以改正!