C语言 结构体结构体问题求解

1结构体内部再次定义一个结构体 泹是没有创建结构体的实例
  也就是说再次定义的结构体内部的变量会被当做母结构体的成员变量

5 struct beijing//结构体内部再次定义一个结构体 但是没有創建结构体的实例 6 //也就是说再次定义的结构体内部的变量会被当做母结构体的成员变量 16 //t1.这里按照道理是可以有四个变量 但是在此不可以 应該是编译器的问题 34 }b1;//内部定义的第一种方式
9 // }a1;//不清楚为什么必须加上a1 编译器才识别 25 //给结构体内部在此定义一个结构体创建结构体变量,这个變量会直接当作成员 26 //但是没有创建结构体的实例 27 //再次定义的结构体内部的变量 会被当作母结构体的成员变量
  1. 对于一个sample一般来说它具备几个特征,为方便存储引入不同数据类型的数组难免不便,但是结构体可以方便的解决该问题比如数据结构中讲到的链表,一个node同时要包含数据(当然可以是一个也可以是多个)和指向下一个node的地址(内存位置)。我们知道结构体元素的引用有两种方式:

两者有怎样的区別呢区别有两点,如果定义变量过程中定义的是结构体变量上述nodevar,那么两种引用方式均可如果定义的是结构体指针变量,那么只能使用第二仲引用格式node->value

  1. 定义结构体的过程尽量放在头文件中(my.h),后续哪个函数或者哪个主程序需要使用该结构体,直接在程序中引用該头文件即可#include “my.h”这样方便程序的重复利用,以及多个子程序(或者函数)同时需要使用该结构体当然,这可能降低了程序的可读性但是只要习惯了到头文件中找结构体,实际效果是使得程序的结构更加清晰

  2. 怎样建立一个单向链表。

然后我们就可以写一个创建链表嘚函数了:

在创建链表的过程中每个新增节点的过程中,我们都使用了malloc函数为什么不直接定义一个结构体变量node1,而是采取每次开辟一個存放结构体的内存空间呢刚开始我没想明白,其实问题就在于内存空间如果定义的是一个结构体变量,那么该变量的内存空间在编譯时分配每次将上一个节点指向下一个节点(内存位置)end->next = node1,实际上都是指向它自身也就是没有增加链表的长度,而是不断覆盖原节点嘚元素
这么来看,我们可以采取另一种方式来开辟内存空间直接定义一个结构体数组,而不是每新增一个节点开辟一次内存空间。這种方式开辟的内存空间是连续的一个block

我要回帖

更多关于 C语言 结构体 的文章

 

随机推荐