从最浅层剖析C语言——第二节(超详细讲解变量创建及其对内存空间的申请)

目录

1.数据类型的全面深入讲解

1.1 数据类型介绍

1.2 各种数据类型的长度

1.3 signed和unsigned

1.4 数据类型的取值范围

2.变量

2.1 变量的创建

2.2 变量的分类

2.3 全局变量和局部变量的存储


1.数据类型的全面深入讲解

1.1 数据类型介绍

生活中任何数据在C语言中都可以划分为某种具体的数据类型,简单举几个例子

int为整型类型(用来描述整数)

e214c02f693845ce9215143848e7f6f2.png

那小数用属于什么类型的变量?由英文float(漂浮,浮动)的意思,float(单精度浮点型),double(双精度浮点型),long double作为浮点型类型来描述小数,同时占位符使用%f表示浮点数类型

值得注意的是,在VS中写小数会自动识别double类型(双精度浮点型)的小数,需要在小数后面加上f才会被识别为float类型(单精度浮点型)的小数

f633ad68b83847c8936adeb839a93e75.png

char作为字符类型来描述字符

5d0751aff18a41eeb5dfcfb15cd73ad0.png

在C99标准中引入了布尔类型(很少使用),是专门表示真假的,布尔类型使用需要包含头文件<stdbool.h>,布尔类型变量取值是:true或者false

ce5b002d2ccc4f868d263dbbc5d28d45.png

如上图所示,创建了一个布尔类型的变量令它等于true,那么下面的if语句便开始执行打印“hehe”

1.2 各种数据类型的长度

在我们通过int char float等数据类型所创建一个变量的同时,代码便会自动根据创建的变量类型向系统申请对应的内存空间

此时我们想研究各个类型的变量分别申请的内存空间是多少,就引入了一个sizeof操作符,sizeof操作符是专门用来计算类型长度(单位是字节),也就是内存空间的大小

关于计算机从低到高的内存单位分别为bit(比特),byte(字节),KB,MB,GB,TB等等

其中一个字节等于八个比特位,1KB等于1024字节,1MB等于1024KB,后面都是以1024为倍率

那么接下来就用sizeof操作符计算一下上面讲述的各种变量类型在创建时所申请的内存空间的大小

27a4465cdff044c781658489afc2efe3.png

以上可以看出各种类型变量所对应的内存空间大小,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 变量的创建

顾名思义:变量就是会变化的量,与之相反便是常量(不变的量)

变量在创建的时候所赋予的初始值,被称为变量的初始化

10c0cc1e0d3347b5b43572a1dbbe9222.png

如图所示,红色部分的为变量a b的初始化,而后面蓝色部分才是真正对于a b这两个变量赋予了值

2.2 变量的分类

变量总体上可分为两种

全局变量:在大括号外部定义的变量,使用范围更广,在整个工程中都可以进行使用

局部变量:在大括号内部定义的变量,只能在所创建的大括号的内部范围使用

那么我们在创建变量时,是更青睐于哪个变量呢?

由于全局变量一旦创建,在我们后期工程中会出现多次使用此变量,那么这个变量一旦修改,将造成牵一发而动全身的局面,影响范围太广,所以在写代码的时候优先创建局部变量,能不用全局变量尽量不使用全局变量

同时,还有一个更有意思的问题,在全局变量和局部变量同时创建相同变量名字但内容不同时,究竟会优先使用哪个变量呢???

a6fb384c47bd456e91e9697f82f4ae6e.png

如图所示,当全局变量与局部变量创建了相同变量名字,最终使用局部变量

2.3 全局变量和局部变量的存储

内存中可主要分为三个区域:栈区、堆区、静态区

局部变量放在内存中的栈区

全局变量放在内存的静态区

堆区是用来进行动态内存管理(后期会深入介绍)

以上是简略的划分,在学习操作系统的时候会介绍更细致的内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值