![3e7ce364cc4dc02a0fa901c479238e20.png](https://i-blog.csdnimg.cn/blog_migrate/314afc0a6919bfbe7101708a989dbda1.png)
C语言有丰富的数据类型,因此它很适合用来编写数据库,如DB2、Oracle都是C语言写的。
C语言的数据类型大致可以分为下图中的几类:
![12f1e6dad969e8a4efff8e4449974bee.png](https://i-blog.csdnimg.cn/blog_migrate/1e3a4e2d8d9af7e0f8c18adff800f4eb.jpeg)
一、变量
跟其他语言一样,C语言中用变量来存储计算过程使用的值,任何变量都必须先定义类型再使用。为什么一定要先定义呢?因为变量的类型决定了变量占用的存储空间,所以定义变量类型,就是为了给该变量分配适当的存储空间,以便存放数据。比如你是char类型,我就只给你分配1个字节就够了,没必要分配2个字节、3个字节乃至更多的存储空间。
下面的表格描述了在16位编译器环境下,基本数据类型所占用的存储空间,了解这些细节,对以后学习指针和数组时是很有帮助的
![1a725f1d550e0a7067db1dd0db1b8b8b.png](https://i-blog.csdnimg.cn/blog_migrate/1fbc1ece7ab26e48f7a8c28c3283b70b.jpeg)
需要注意的是:
1.局部变量的使用跟Java稍微有点不一样
1> 在Java中,你声明了一个局部变量后,如果没有经过初始化赋值就使用该变量,编译器直接报错
![f1d65d11db86a217b48e4770d0eec114.png](https://i-blog.csdnimg.cn/blog_migrate/b6952fa33ebd4b3e3aeb7b91e940d0d2.jpeg)
第9行报错了,因为变量a没有初始化
2> 在C语言中,你声明看一个局部变量后,没有经过初始化赋值是可以使用的
![b26d15d9b769b4eef45f717056701114.png](https://i-blog.csdnimg.cn/blog_migrate/559a21c8d404eb3af2214c7b69e54b0a.jpeg)
但这是很危险的,不建议这样做。大多数人应该觉得变量b打印出来应该是0,其实不是。因为系统会随意给变量b赋值,得到的是垃圾数据。
上述代码的打印结果是:
![fb6e72d9578bae64c271a580ef60e20c.png](https://i-blog.csdnimg.cn/blog_migrate/1b12b6a2334223d75bc080e60ae92ac8.jpeg)
因此,局部变量还是必须先进行初始化赋值,然后再使用,这样才是最安全的做法。
* 如果是全局的int类型变量,系统会默认赋值为0
![756ce1a0faf8e55cbc57213db5f7f36b.png](https://i-blog.csdnimg.cn/blog_migrate/4daa8333d3f0be466cbf56d0a858fbe8.jpeg)
2.char的取值范围是:ASCII码字符 或者 -128~127的整数
于是,使用char存储大写字母A有2种赋值方式:
![9b488070e5aea2a0403732876c983b47.png](https://i-blog.csdnimg.cn/blog_migrate/43037c946df79c48cbd482537142428f.png)
上面两种方式是等效的,因为大写字母A的ASCII码值刚好为65。
3.char只能存储一个字符
汉字或者字符串需要用字符数组来存储,因为一个汉字占了2个字符,一个字符串是由一个或者多个字符组成的。
因此,下面的写法都是错误的:
![35c893c1a54ed9d663780e7ddb833975.png](https://i-blog.csdnimg.cn/blog_migrate/f7f855c0b25fddf1ecde6053966097f6.jpeg)
二、类型修饰符
我们还可以在基本数据类型的前面加一些修饰符,也有人称之为限定符,一样的意思。
有以下4种类型修饰符:
● short 短型
● long 长型
● signed 有符号型
● unsigned 无符号型
1.用法演示
这些修饰符最常是用来修饰int类型(可以省略int)
![bff1adc0e04d02fdf3b079d0f2e6ceb2.png](https://i-blog.csdnimg.cn/blog_migrate/775722f71f81ed1907d1abb056943a68.jpeg)
2.short和long
1> short和long可以提供不同长度的整型数,也就是可以改变整型数的取值范围,比如short的取值范围是-32768~32767,long的取值范围就是-2147483648~2147483647
2> 当然,数据的存储长度也会跟着变化。比如,在64位编译器环境下,short占2个字节(16位),int占4个字节(32位),long占8个字节(64位)。世界上的编译器林林总总,不同编译器环境下,取值范围和占用的长度是不一样的,不过幸运的是,ANSI ISO制定了以下规则:
* short跟int至少为16位(2字节)
* long至少为32位(4字节)
* short的长度不能大于int,int的长度不能大于long
* char一定为为8位(1字节),毕竟char是我们编程能用的最小数据类型
3.signed和unsigned
1> signed代表有符号,包括正数、负数和0;unsigned代表无符号,只包括正数和0。比如,signed的取值范围是-32768~32767,那么unsigned的取值范围是0~65535,当然,不同的编译器有不同的取值范围
2> 其实,signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数,
4.signed、unsigned也可以修饰char,long还可以修饰double
![ca9330398085c78a5320ad4873d68dce.png](https://i-blog.csdnimg.cn/blog_migrate/afb2270b5088a7cabcb4bee060914c14.jpeg)
三、不同编译器环境下基本数据类型的存储长度
红色的代表常用的数据类型
![e86bf63e1b639c321f898ae5ab83290d.png](https://i-blog.csdnimg.cn/blog_migrate/c16cb07ada8a65af9fd6e20b59937ce8.jpeg)
“我是一名从事了10年开发在退休边缘垂死挣扎的高龄程序员,最近我花了一些时间整理了一个完整的学习C语言、C++的路线,项目源码和工具。对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐我专栏的C语言/C++编程爱好者的聚集地>>>ef="https://jq.qq.com/?_wv=1027&k=5RDAmZF">C/C++编程技术交流聚集地,还有素材笔记和项目源码等!
欢迎初学和进阶中的小伙伴!工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以一起学习!”
喜欢小编的记得动动您的小指点个关注哟!最后分享C/C+编程技术学习路线图和资料给爱学习的小伙伴们
![c1c934f92706488ec161a9da9205a69f.png](https://i-blog.csdnimg.cn/blog_migrate/081f50e3e0795bac44d71eac5164fc9d.jpeg)