C语言数据类型和变量(上)

数据类型介绍

C语言提供了丰富的数据类型来描述生活中的各种数据。 使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。

下面盘点⼀下C语言提供的各种数据类型,本章节主要探讨内置数据类型。

C语言分为两种数据类型:内置类型和自定义类型。

内置类型包括:整形、字符型、浮点型、布尔类型。

自定义类型包括:数组、结构体(struct)、枚举(enum)、联合体(union)。

字符型

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

当我们写int时默认都是signed int,只有写unsigned int时才表示无符号的int。

浮点型

float------单精度

double------双精度

long double

单精度与双精度的区别,顾名思义:肯定是精度不同,float保留8位小数,double是保留16位小数。

布尔类型

C语言原来并没有为布尔值单独设置⼀个类型,而是使用整数0表示假,非零值表示真。 在 C99 中也引入了布尔类型 ,是专门表示真假的。

_Bool

布尔类型的使用得包含头文件

布尔类型变量的取值是: true 或者 false

#define bool _Bool

#define false 0

#define true 1

例如:C语言数据类型和变量(上)_第1张图片

使用布尔类型的时候,应该和使用整形一样去类比:C语言数据类型和变量(上)_第2张图片

 各种数据类型的长度

每⼀种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度不同的变量,变量长度的不同,存储的数据范围就有所差异。

sizeof 操作符 

sizeof 是⼀个关键字,也是操作符,专门是用来计算sizeof的操作符数的类型长度的,单位是字 节。 sizeof 操作符的操作数可以是类型,也可是变量或者表达式。

如下所示:

C语言数据类型和变量(上)_第3张图片

sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。
sizeof 的计算结果是 size_t 类型的。

废话不多说,直接上代码:

C语言数据类型和变量(上)_第4张图片

sizeof 在代码进行编译的时候,就根据表达式的类型确定了,类型的常用,而表达式的执行却要在 程序运行期间才能执行,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执行表达式了 (总之,记住sizeof里表达式的值不会进行运算。)

 sizeof 运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给
系统自己去决定。sizeof 到底返回什么类型,不同的系统中,返回值的类型有可能是
unsigned int ,也有可能是 unsigned long ,甚至是 unsigned long long ,对应的 printf() 占位符分别是 % u 、 % lu 和 % llu 。这样不利于程序的可移植性。C 语言提供了⼀个解决方法,创造了⼀个类型别名 size_t ,用来统⼀表示sizeof 的返回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是unsigned long long 。 

数据类型长度

照样是举例子:

在VS2022 X64配置下的输出:

C语言数据类型和变量(上)_第5张图片

这里可能有人要问了,为什么long 也是4个字节啊?其实C语言规定long的字节数是大于等于int的,4>=4,成立,在不同的编译器下,可能会不同,我使用的是VS2022

signed 和 unsigned

C 语言使用 signed 和 unsigned 关键字修饰字符型和整型类型的。 signed 关键字,表示⼀个类型带有正负号,包含负值; unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数。 对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。 由于这是默认情况,关键字 signed ⼀般都省略不写,但是写了也不算错。

整数变量声明为 unsigned 的好处是,同样长度的内存能够表示的最大整数值,增大了⼀倍。 比如,16位的 signed short int 的取值范围是:-32768~32767,最大是32767;而 unsigned short int 的取值范围是:0~65535,最大值增大到了65535。

注意:C 语言规定 char 类型默认是否带有正负号,由当前系统决定。 这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是 unsigned char。这⼀点与 int 不同, int 就是等同于 signed int 。

变量

变量的创建 

了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。 什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量。变量创建的语法形式是这样的:

C语言数据类型和变量(上)_第6张图片

C语言数据类型和变量(上)_第7张图片

变量在创建的时候就给⼀个初始值,就叫初始化。例如:

C语言数据类型和变量(上)_第8张图片

变量的分类

全局变量:在大括号外部定义的变量就是全局变量,全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。

局部变量:在大括号内部定义的变量就是局部变量 局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。

代码如下:C语言数据类型和变量(上)_第9张图片

如果局部和全局变量,名字相同呢?

代码如下:C语言数据类型和变量(上)_第10张图片

其实当局部变量和全局变量同名的时候,局部变量优先使用。

变量的存放

全局变量和局部变量在内存中存储在哪里呢?

⼀般我们在学习C/C++语⾔的时候,我们会关注 内存中的三个区域:栈区、堆区、静态区。

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

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

堆区是用来动态内存管理的(后期会介绍)

C语言数据类型和变量(上)_第11张图片

 上面这个图可以清晰的展示了,其实内存区域的划分会更加细致,以后在操作系统的相关知识的时候会介绍。

你可能感兴趣的:(C语言,c语言,开发语言)