大家好我是技术男老张,今天给大家分享的内容是“数据类型”相关的内容,希望通过本文的内容能够帮助你快速的理解和掌握基本数据类型、构造数据类型的相关知识点。首先声明本人不是写书的专业人士,本人就是理工男一枚,文笔水平一般,难免会出现错别字或语法结构不通的情况,请大家多多理解和包容。
上一篇文章介绍了【函数调用】相关知识点,感兴趣的可以点击下方连接:
在讲解新内容之前,我们先来总结一下,前一篇文章的知识点有如下内容:
函数体的执行流程。
注释符的使用及规则。
什么是直接递归调用。
什么是间接递归调用。
直接递归调用与间接递归调用的区别。
递归的终止条件在直接和间接递归调用中的区别。
一、基本数据类型
我们先来看一下基本数据类有哪些,如下图:

上图展示了C语言全部的 基本数据类型 ,那么很多朋友可能会问,干嘛要搞这么多类型,有何用,有何区别?下面我会大家慢慢讲解这些知识点之前,在讲解之前 大家要牢记如下几点:
1. 数据类型只是关键字且不占用存储空间;
2. 数据类型的作用是用于定义变量的存储方式;
3. 数据类型定义的变量分配的存储空间是内存空间而不是磁盘空间;
4. 数据类型不同其定义变量的值,所存储的数值范围也会不同。
5. 数据类型分为:基本类型、构造类型、指针类型 。
我们看上图发现不同的类型其长度(字节)会有所不同,下面我们讲一下什么是字节, 字节是数据存储的一个单位,一个字节等于8个bit(位),bit 是最小的存储单位。而bit 只能存储一个状态(这个状态要么真要么假)。了解完字节是个什么东东后,我们可以搞清楚上图中长度(字节)的概念了。说明:bool类型上图没有说明其长度(字节),实际上bool类型也是占用一个字节的存储空间。
我们接着说取值范围是什么意思,简单理解就是 取值范围 就是当前类型可以存储的数值范围。比如上图的bool 类型 取值范围就是 true或false,啥时真假?真假简单理解就是两个状态 0或1,这样理解就好。
接下来我们探讨一个问题,我用长度为2个字节的类型 会比 用长度为4个字节的类型节省内存空间吗?对于这个问题 可能会节省空间也可能不会节省空间。为什么会这样说,是因为能否节省内存空间不仅仅是类型长度决定的还要和内存是否 边界对齐 有关,简单理解就是,如果边界对齐那么一次内存读取只能4个字节那么就算我们用的类型是2个字节,但是对内存来说浪费了2个字节的空间,也就是用了4个字节的内存空间。我好像话题扯的有点远了...., 接下来 我们继续说上图没有说到的内容,上图中 “说明 "这一列的内容不够细致,为了便于更好理解和掌握,详细说明如下:
布尔型(bool):
长度 1个字节,这个类型定义的变量只能接受 true(1) 或 false(0) ,其他都不接受。
字符型(char):
长度 1个字节,这个类型可不要从字面理解是存储字符的哦,这个类型虽然叫字符类型,但是理论上是可以存储 -128 ~ 127 这个范围的任何数值,有些编译器是支持 char i = 5; 这样的赋值。 这个要搞清楚 免得被他人嘲笑 哈哈哈。
无符号字符型(u char):
长度 1个字节,这个类型只能存储非负数的值,可以存储 0 ~ 255 这个范围的任何数值。
短整型(short):
长度 2个字节,这个类型只能存储整数的数值,但是存储的范围比较短,可以存储负数或整数。
无符号整型(u short):
长度 2个字节,和短整型的区别是这个类型不能存储负值。非负数的存储范围要大于短整型。
整型(int):
长度 4个字节, 和短整型的唯一区别是 多了2个字节,相当于大卡车级别,短整型就是小货车 哈哈哈。
无符号整型(u int):
长度 4个字节,和整型的区别是这个类型不能存储负值,也是大卡车级别的。
长整型(long):
长度也是4个字节 和 整型(int) 属性一样,但是long类型在其他语言环境中可能长度会大于int,我们不要以为 和 int 属性一样就认为多余哦。
无符号长整型(u long):
长度也 4个字节,和 无符号整型(u int) 属性一样,在其他语言环境中长度可能会大于 uint 类型。
单精度型(float):
长度 4个字节,用于存储浮点类型的值,但是肚子小装不了太多东西。
双精度型(double):
长度 8个字节,用于存储浮点类型的值,这个肚子大,单精度型装不下的时候这哥们就派上用场了。
二、构造类型
构造类型主要包括:枚举类型(enum )、数组类型(array)、结构类型(struct)、联合类型(union)。
1. 枚举类型简介
下面我们先来了解枚举类型,枚举类型关键字是 enum ,下面代码我们使用了enum 关键字定义了的对象 boolean ,这个 color 对象 有两个成员分别是 red 和 green 。
enum color { red, green};
细心的朋友可能会发现 我把 color 叫做对象,而不是以往的叫法 变量,这是因为 color 属于 构造类型且成员类型都是常量,color 对象后面 { } 内包裹的就是它的成员,成员之间用逗号分隔。上面的代码中 color 对象的成员是 red 和 green。这玩意儿 有啥用?简单理解就是为了提高代码的可读性和可维护性。
下面说一下枚举类型的几个关键点:
enum 是关键字, 定义的对象是枚举类型,成员是常量不是变量。
对象成员是常量 其成员的默认值,从左到右递增且初始数值为 整数 0。
对象成员的初始值只可以在定义过程中设置,例如:enum color { red=2, green=6};
2. 枚举类型的使用
我们先来看下面的代码
enum color { red, green};
int main () {
enum color mycolor;
mycolor = green; // mycolor 赋值为 green;
return 0;
}
这段代码 在 main 函数体内 定义了 枚举类型变量 mycolor, 大家注意此刻 mycolor是变量而不是常量。接着我们给变量 mycolor 赋值为 green, 此刻 mycolor的值 就是 green。有的朋友可能有疑问 能否把 blue 赋值给 mycolor ?答案肯定是不行的,因为 color的成员没有 blue,所有我们得到的结论是 给 mycolor 赋值只能是 存在的成员。
好了,今天内容的分享就到这里,有不理解的朋友可以在底部留言,下一篇文章会给大家分享”构造类型之结构体“的相关内容 。感谢大家的支持!