零基础跟我学C语言【3】—— 基本数据类型及枚举类型

大家好我是技术男老张,今天给大家分享的内容是“数据类型”相关的内容,希望通过本文的内容能够帮助你快速的理解和掌握基本数据类型、构造数据类型的相关知识点。首先声明本人不是写书的专业人士,本人就是理工男一枚,文笔水平一般,难免会出现错别字或语法结构不通的情况,请大家多多理解和包容。

上一篇文章介绍了【函数调用】相关知识点,感兴趣的可以点击下方连接:

零基础跟我学C语言【2】—— 理解函数的调用

在讲解新内容之前,我们先来总结一下,前一篇文章的知识点有如下内容:

函数体的执行流程。

注释符的使用及规则。

什么是直接递归调用。

什么是间接递归调用。

直接递归调用与间接递归调用的区别。

递归的终止条件在直接和间接递归调用中的区别。

 一、基本数据类型

我们先来看一下基本数据类有哪些,如下图:


上图展示了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 赋值只能是 存在的成员。


好了,今天内容的分享就到这里,有不理解的朋友可以在底部留言,下一篇文章会给大家分享”构造类型之结构体“的相关内容 。感谢大家的支持! 

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容