C语言结构体?

  本文主要介绍了中结构体的自引用和相互引用,详细解析了结构体中指针的指向情况,有需要的小伙伴可以参考一下,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生网!

  结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。

  结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。

  1. 自引用 结构体

  这种声明是错误的,因为这种声明实际上是一个无限循环,成员b是一个结构体,b的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。

  正确的方式: (使用指针):

  由于指针的长度是确定的(在32位机器上指针长度为4),所以编译器能够确定该结构体的长度。

  NODE *link; /* 虽然也使用指针,但这里的问题是:NODE尚未被定义 */

  这里的目的是使用typedef为结构体创建一个别名NODEP。但是这里是错误的,因为类型名的作用域是从语句的结尾开始,而在结构体内部是不能使用的,因为还没定义。

  正确的方式:有三种,差别不大,使用哪种都可以。

  2. 相互引用 结构体

  错误的原因和上面一样,这里类型B在定义之 前 就被使用。

  正确的方式:(使用“不完全声明”)

  应用结构体指针变量,打印结构体成员变量的信息。

  程序运行结果如下:

  通过结构体指针变量获得其结构体变量的成员变量的一般形式如下:

  (*结构体指针变量). 成员变量

  其中“结构体指针变量”为结构体指针变量,“成员变量”为结构体成员变量名称,“.”为取结构体成员变量的运算符。

  另外C语言中引入了新的运算符“->”,通过结构体指针变量直接获得结构体变量的成员变量,一般形式如下:

  结构体指针变量-> 成员变量

  其中“结构体指针变量”为结构体指针变量,“成员变量”为结构体成员变量名称,“- >”为运算符。

  因此,例中的部分代码

有列子最好,书上的列子全是成绩统计的... 有列子最好,书上的列子全是成绩统计的

C语言中的结构体可以定义一些复杂数据类型,把一些有内在联系的不同变量放在一起封装成一个整体,这就是结构体。

例如:以学生为例,学生存在学号,姓名,性别,班级等。此时你可以顶一个结构体,将这些学生信息封装到一个结构体中。

C语言结构体在函数中的应用

结构体是C的一个突破点,就好比int这个类型一样,你可以定义一个类型,用结构体来定义,对于C来说,对类型的操作不能集成在结构体当中,只能用单独的函数来实现,但是C++中有类class可以集成,新版的C++也允许结构体中拥有函数,你只要记住,结构体类似于int float的类型定义,只不过没有具体的函数或者方法罢了

实际信息处理过程中,有许多信息是由多个不同类型的数据组合在一起进行描述的,而且这些不同的类型的数据是互相联系组成了一个有机的整体——结构体

将有相干联系的几项组成一个组合项,比如大学生:名字、学号、院系、专业、年龄、成绩,这样做便于查询


推荐于 · TA获得超过231个赞

  结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成你想要的数据类型。以方便日后的使用。
  在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。
  结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
结构体可以定义一些复杂数据类型,比如我要定义一个员工信息的结构体,就可以在结构体里添加员工编号、姓名、工资、地址、出生日期、电话等信息,有了结构体给编程带来很大的方便。

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

C语言中的嵌套结构体表示在一个结构体中可以使用另一个结构作为成员。在C语言中定义结构体嵌套有两种方法:

我们可以创建2个结构体,但在主结构中应该使用依赖其它结构体作为成员。我们来看看嵌套结构体的代码。

如上所见,doj(加入日期)是Date类型的变量。 这里doj用作为Employee结构体中的成员。通过这样的方式,我们可以在其他结构体中使用Date结构。

我们可以在结构体内定义结构体,它比第一种方式需要更少的代码。但它不能用于其它结构中。

我们来看看C语言中嵌套结构体的一个简单例子。创建一个源代码文件:nested-structure.c,其代码如下 -

执行上面示例代码,得到以下结果 -


我要回帖

更多关于 c语言的结构体是什么 的文章

 

随机推荐