如何实现将子结构体添加到父结构体链中
1、功能
定义一个包含学生信息的结构体记为结构体A,和一个学校信息的结构体记为结构体B;
学校信息结构体中包含学生信息结构体成员;
即A是B中的一个成员变量;
同时A中还包含自身,即A中包含A;
然后定义多个A类型的结构体变量,a0,a1,..............等等;
最后实现将a0,a1,..............添加到B结构体类型的变量b中,构成一个链表的形式;
2、程序代码如下所示:
// 结构体占内存空间的判断.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string>
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//声明一个标明学生信息的结构体
typedef struct STUDENT_INFO
{
char num;//编号
int age;
float salary;
STUDENT_INFO *stuInfoNext;
}*LP_STUDENT_INFO;//注意给结构体定义一个指针的名称;
//申明一个包含学校信息的结构体
typedef struct SCHOOL_INFO
{
int schoolNum;
LP_STUDENT_INFO studentInfoFirst;
//STUDENT_INFO *studentInfoFirst;//嵌套其他结构体的时候可以也使用这种形式;总之不要给其分配内存空间;
}*LP_SCHOOL_INFO;
//输出该结构体占有的内存空间大小
cout<<"申明的结构体1占有的内存空间大小为:"<<sizeof(STUDENT_INFO)<<"B字节"<<endl;
cout<<"申明的结构体2占有的内存空间大小为:"<<sizeof(SCHOOL_INFO)<<"B字节"<<endl;
LP_SCHOOL_INFO schoolInfo;
schoolInfo=(LP_SCHOOL_INFO)malloc(sizeof(SCHOOL_INFO));
schoolInfo->schoolNum=1;
schoolInfo->studentInfoFirst=NULL;//每一个变量都需要赋值;
LP_STUDENT_INFO stu1;
stu1=(LP_STUDENT_INFO)malloc(sizeof(STUDENT_INFO));//一定要对指针结构体初始化;
stu1->num='1';
stu1->age=15;
stu1->salary=1000.0;
stu1->stuInfoNext=NULL;
if (schoolInfo->studentInfoFirst==NULL)
{
schoolInfo->studentInfoFirst=stu1;
cout<<"第一个学生信息结构体即为空"<<endl;
}
else
{
LP_STUDENT_INFO tempStudentInfo=schoolInfo->studentInfoFirst;
while(tempStudentInfo->stuInfoNext)
{
tempStudentInfo=tempStudentInfo->stuInfoNext;
}
tempStudentInfo->stuInfoNext=stu1;
cout<<"第一个学生信息结构体不为空"<<endl;
}
cout<<sizeof(*schoolInfo)<<endl;
//再添加一次
if (schoolInfo->studentInfoFirst==NULL)
{
schoolInfo->studentInfoFirst=stu1;
cout<<"第一个学生信息结构体即为空"<<endl;
}
else
{
LP_STUDENT_INFO tempStudentInfo=schoolInfo->studentInfoFirst;
while(tempStudentInfo->stuInfoNext)
{
tempStudentInfo=tempStudentInfo->stuInfoNext;
}
tempStudentInfo->stuInfoNext=stu1;
cout<<"第一个学生信息结构体不为空"<<endl;
}
cout<<sizeof(*schoolInfo)<<endl;//两次情形下面都是8B,说明其大小并未发生变化;
return 0;
}
3、显示结果如下图所示:
4、注意:
虽然b中包含了a0,a1,..............,但是由于是指针的值,故b的大小不变;