本篇博客,将为大家介绍C语言中的数据类型和变量,希望可以为大家提供帮助。
1.数据类型介绍
首先,大家应该来了解数据类型的分类
数据类型分为内置类型和自定义类型,其中作为初学者的话,内置类型是我们优先学习的,
它包括字符型、整型、浮点型以及布尔类型(这里说明一下,布尔类型是C99之后出现的内置类型);下面,为大家介绍一些常见的自定义类型,它们分别是,数组、结构体、联合体和枚举,其中数组和结构体的内容最为关键,在后面数据结构的学习中,结构体的相关内容运用广泛,所以大家在学习这部分的内容时,要注重对其的理解。OK,上面为大家简单地介绍了一下数据类型的相关分类,总结请看下图。
1.1字符型
(signed)char
unsigned char
1.2整型
(signed)short
unsigned short
(signed)long
unsigned long
(signed)int
unsigned int
1.3浮点型
float
double
long double
1.4布尔类型
_Bool
这里需要注意,布尔类型的使用要包含在<stdbool.h>这个头文件中!
布尔类型的取值为true或false。
说到这里,想必大家已经对C语言的数据类型种类有了一定了解。这里,肯定会有人提出疑问,这些数据类型在内存中的空间大小分别是多少呢?下面,将为大家介绍一个操作符,它可以帮助我们求出各个数据类型的长度。
1.5 sizeof操作符
1.5.1 相关概念
sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。
sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。
sizeof 的计算结果是 size_t 类型的。(这里注意,结果是size_t类型,意味着sizeof计算出的结果不能出现负数)
1.5.2 下面实现求出各个数据类型的长度
上图是使用VS2022的编译环境求出的各个数据类型的长度,仅供参考。
这里还需要说明一点,在打印size_t类型的结果时,最好使用"%zd"进行打印。
1.5.3 sizeof中的表达式不参与计算
前面说到,sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。
下面通过代码为大家验证这一结论,请看下图
通过上图,大家应该理解了为什么说sizeof中的表达式不计算。代码中变量s为short类型的变量,所以不管后面的表达式计算什么,都不影响最终结果。当然,看到s=2后,想必你也了解到,那个表达式根本就没有执行,s的值依旧说初始化时的值。
2.signed与unsigned
signed和unsigned是两个关键字,被用来修饰整型和字符型。
这两个关键字存在一定的区别,其中
signed 关键字,表⽰⼀个类型带有正负号,包含负值;
unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。
对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。
这里需要注意,C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。 这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是 unsigned char 。 这⼀点与 int 不同, int 就是等同于 signed int 。
3.变量
3.1变量的创建
变量的创建很简单,如下
以上就是创建变量的方式;
在我们创建变量的时候,我们应养成良好的习惯,那就是对创建的变量进行初始化,初始化的方法也很简单
上图展示了一些常用变量的初始化,相信大家已经掌握了初始化的方法。
3.2变量的分类
C语言中的变量分为全局变量和局部变量
全局变量:在⼤括号外部定义的变量就是全局变量;
局部变量:在⼤括号内部定义的变量就是局部变量;
对于全局变量和局部变量的概念,大家应该理解
同时,这里有一个问题,有一次我在看同学的代码时,看到下面一段代码
大家可以猜一下上面的代码运行结果是什么,上面的代码中全局变量和局部变量的名字相同,那么这个时候应该用哪个呢?请看下面的运行结果
可以看到,打印的是10,到这里,想必你的心中已经有了答案。
当全局变量和局部变量同名时,局部变量优先。
说到这里,可能有的同学想了解这些变量在内存中的什么位置存储,这里拓展一下,
局部变量是放在内存的栈区
全局变量是放在内存的静态区
堆区是⽤来动态内存管理的
4.算术操作符
4.1 +和-
+和-都是有两个操作数,它们都是双目操作符。
4.2 *和/
*和/也都是双目操作符,它们的使用都很简单。
其中需要注意,"/"运算进行的是整除运算;
其次,如果想要得到浮点数的结果,两个运算数至少有一个要为浮点数。
4.3 %运算
"%"运算只用于整数,不能用于浮点数。
说到这儿,相信可能有不少同学被负数取模运算的方法困扰过;
在这里,说明一下负数取模运算的规则:结果的正负号由第⼀个运算数的正负号决定。
5.单目操作符
5.1 ++和--
++和--分别是自增和自减操作符,它们分别有前置的和后置的,详细内容请看下文。
5.1.1 前置++
含义:先+1,后使用
请看下面的代码
通过上面的代码,大家可以看到,前置++的用法,注释掉的代码就是它的等价代码,它们表达的含义一样,便于大家理解。
5.1.2 后置++
含义:先使用,后+1
请看下面的代码
在上面的代码中,我们可以看到,先将a的值赋给了b,然后再对a进行自增,所以结果为a==11,b==10。
5.1.3 前置--
含义:先-1,后使用
同上,咱们通过代码来理解它,请看
想必大家很容易就理解了上面的代码,与++操作符是类似的
5.1.4 后置--
含义:先使用,后-1
这里就不作赘述了,想必大家通过前面几个操作符的类比学习,可以轻松理解上面的代码。
6.总结
本篇博客主要为大家介绍了以下内容,它们包括数据类型的介绍、signed与unsigned、变量、算书操作符、单目操作符。希望上面的内容可以为大家带来帮助,如有错误,欢迎大家评论指教,谢谢!