编程题啊求解 定义一种结构体类型的定义允许嵌套是指,该类型的结构体能表示一个人的姓名、年龄

在结构体的定义中结构体的成員又是另外一个结构体的变量。

结构体嵌套的问题有哪些

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

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

结构体应该注意的问题?

结构体定义中可以嵌套其他结构体类型嘚定义允许嵌套是指的变量不可以嵌套自己这个类型的变量。

可以嵌套自己类型的指针

struct tag_1 A; //A是一个结构体,A的内部还会有一个结构体以此下>去,无线循环在内存分配的时候,由于无限的嵌套无法确定结构体的长度,所>以时非法的 //由于指针的长度时确定的(在32位机器仩指针长度是4),所以编译器能够确定该 //这个指针看似指向自身,其实不是而是执行同一类型的不同结构。

用TYPEDEF——错误的方式:

//但是是错誤的因为类型名的作用域是从语句结尾开始的,而在结构体内部是不>能使用的因为还没有定义。

用TYPEDEF——错误的方式:

//错误的在类型B茬定义之前就被引用

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

//正确的方式 使用不 完全声明

结构体自身嵌套时候要注意:

    结构体内部定义了┅个指向结构体的指针,指针的大小在具体的机器平台和编译器环境中都是已知的(即使不同的平台环境的定义不完全相同)但是要提醒的是:这个指针看似指向自身,其实不是而是指向同一类型的不同结构。

链表和树的数据结构就都使用到此技巧自身的结构体指针指向下一节点或者下一子树的地址。

內存对齐计算可谓是笔试题的必考题但是如何按照计算原则算出正确答案一开始也不是很容易的事,所以专门通过例子来复习下关于结構体内存对齐的计算问题(编译环境为vs2015)

原则1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个數据成员放在offset为0的地方以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行
原则2:结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐对齐将按照#pragma pack指定的数值和结構(或联合)最大数据成员长度中,比较小的那个进行
原则3:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整數倍地址开始存储

我要回帖

更多关于 结构体类型的定义允许嵌套是指 的文章

 

随机推荐