怎么在C语言中自定义结构体和枚举

  介绍

这篇文章将为大家详细讲解有关怎么在C语言中自定义结构体和枚举,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

C语言是什么

C语言是一门面向过程的,抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译,处理低级存储器。

结构体基础知识

首先结构体的出现是因为我们使用C语言的基本类型无法满足我们的需求,比如我们要描述一本书,就需要书名,作者,价格,出版社等等一系列的属性,无疑C语言的基本数据类型无法解决,所以就出现了最重要的自定义数据类型,<强>结构体

首先我们创建一个书的<>强结构体类型来认识一下

struct 书   {   char [20]名称;   char 作者[20];   int 价格;   };

首先是<强> struct 是结构体关键字,用来告诉编译器你这里声明的是一个结构体类型而不是其他的东西,然后是书<强> 是结构体标签,而关键字加标签就是你结构体类型的名字,即<强> struct书是你结构体类型的名字,然后看到结构体里面的内容,即大括号里面的内容,有两个字符数组和一个整型变量,一个数组用来存放书的名字,一个数组用来存放书的作者,整型变量用来存放书的价格,<强>在类型声明中需要多少变量就放入多少变量,需要什么变量就放入什么变量,而这些变量就是结构体的成员变量,成员变量可以是不同的类型,<强>注意,结构体声明的末尾分号不可省略强,到此我们已经有了基本的认识,接下来我们来使用一下结构体类型,既然是类型,那么肯定就可以拿来创建变量,我们就拿上面那个描述书的结构体类型试一下

怎么在C语言中自定义结构体和枚举

可以看到使用规则和基本数据类型之类的并无太大区别,唯一区别就是结构体初始化一定要用大括号将初始化的内容括起来,如果不是初始化那么就需要先访问他的成员才能一一赋值,这里我们是在创建结构体的时候对它进行了初始化,放入了一些数据,小伙伴们能够清楚的看到屏幕上输出了这些数据,其中通过结构体变量访问结构体成员的时候使用了<强>点号。强这个点号是结构体成员访问操作符,通过它我们就可以拿到结构体的成员,看完之后小伙伴们最好是自己也敲一下试试,代码能力是练出来的,初学时一定要多敲多练,到此结构体基础知识我们就介绍完了,接下来我们来进阶一下。

结构体进阶知识

首先结构体是可以嵌套定义的,像下面这样

怎么在C语言中自定义结构体和枚举

怎么在C语言中自定义结构体和枚举

怎么在C语言中自定义结构体和枚举

结构体计算大小

结构体在分配内存的时候,会发生结构体内存对齐,对齐规则如下:

<李>

第一个成员在与结构体变量偏移量为0的地址处。

<李>

其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

<李>

结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。

<李>

如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

<李>


知道了规则我们来用一下,下面这个结构体的大小不考虑对齐的情况只需要6字节的空间就能存下所有数据,但是考虑到内存对齐就需要12字节的空间,这就足足多了一倍的空间,那么为什么还需要这个对齐的规则呢,原因大致有以下两点:

<李>

平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

<李>

性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

怎么在C语言中自定义结构体和枚举