目录
1.数据类型的全面深入讲解
1.1 数据类型介绍
生活中任何数据在C语言中都可以划分为某种具体的数据类型,简单举几个例子
int为整型类型(用来描述整数)
那小数用属于什么类型的变量?由英文float(漂浮,浮动)的意思,float(单精度浮点型),double(双精度浮点型),long double作为浮点型类型来描述小数,同时占位符使用%f表示浮点数类型
值得注意的是,在VS中写小数会自动识别为double类型(双精度浮点型)的小数,需要在小数后面加上f才会被识别为float类型(单精度浮点型)的小数
char作为字符类型来描述字符
在C99标准中引入了布尔类型(很少使用),是专门表示真假的,布尔类型使用需要包含头文件<stdbool.h>,布尔类型变量取值是:true或者false
如上图所示,创建了一个布尔类型的变量令它等于true,那么下面的if语句便开始执行打印“hehe”
1.2 各种数据类型的长度
在我们通过int char float等数据类型所创建一个变量的同时,代码便会自动根据创建的变量类型向系统申请对应的内存空间
此时我们想研究各个类型的变量分别申请的内存空间是多少,就引入了一个sizeof操作符,sizeof操作符是专门用来计算类型长度(单位是字节),也就是内存空间的大小
关于计算机从低到高的内存单位分别为bit(比特),byte(字节),KB,MB,GB,TB等等
其中一个字节等于八个比特位,1KB等于1024字节,1MB等于1024KB,后面都是以1024为倍率
那么接下来就用sizeof操作符计算一下上面讲述的各种变量类型在创建时所申请的内存空间的大小
以上可以看出各种类型变量所对应的内存空间大小,sizeof计算出的内存空间大小都是以字节为单位的,同时byte(字节)也是内存空间的基础单位,最小的单位为bit(比特)
值得注意的是,上面的占位符用的是%zd,这是因为sizeof的返回值在C语言中是不确定的,所以sizeof的返回值类型被统一表示为size_t,对应的占位符就是%zd
1.3 signed和unsigned
C语言中使用signed和unsigned关键字修饰字符型和整型类型的
signed表示一个类型带有正负号,包含了负数
而unsigned只表示一个类型为零或正整数
那么这二者使用起来有何优劣呢?注意:正常情况下signed默认不写,因为int类型默认带有正负号,但char类型默认是否带有正负号由当前系统决定
我们前面知道创建对应的变量的知道,每个变量在创建的时候都有对应的最大内存空间,
在正常short int类型中,能够表示的整数范围为-32768——32767,而在unsigned short int类型中,由于舍弃了负数的可能性,取值范围变为了0——65535,存储的最大整数增加了两倍
1.4 数据类型的取值范围
刚刚上面提到了short int类型能够表示的整数范围,但我们不需刻意去记住每个数值,有种简单的表示方法,如:SHRT_MIN,SHRT_MAX就分别表示short类型在存储的数值上的最小值和最大值,在我们C语音需要用到的时候网上查找对应的数值即可
2.变量
2.1 变量的创建
顾名思义:变量就是会变化的量,与之相反便是常量(不变的量)
变量在创建的时候所赋予的初始值,被称为变量的初始化
如图所示,红色部分的为变量a b的初始化,而后面蓝色部分才是真正对于a b这两个变量赋予了值
2.2 变量的分类
变量总体上可分为两种
全局变量:在大括号外部定义的变量,使用范围更广,在整个工程中都可以进行使用
局部变量:在大括号内部定义的变量,只能在所创建的大括号的内部范围使用
那么我们在创建变量时,是更青睐于哪个变量呢?
由于全局变量一旦创建,在我们后期工程中会出现多次使用此变量,那么这个变量一旦修改,将造成牵一发而动全身的局面,影响范围太广,所以在写代码的时候优先创建局部变量,能不用全局变量尽量不使用全局变量
同时,还有一个更有意思的问题,在全局变量和局部变量同时创建相同变量名字但内容不同时,究竟会优先使用哪个变量呢???
如图所示,当全局变量与局部变量创建了相同变量名字,最终使用局部变量
2.3 全局变量和局部变量的存储
内存中可主要分为三个区域:栈区、堆区、静态区
局部变量放在内存中的栈区
全局变量放在内存的静态区
堆区是用来进行动态内存管理(后期会深入介绍)
以上是简略的划分,在学习操作系统的时候会介绍更细致的内容