如何实现将子结构体添加到父结构体链中

如何实现将子结构体添加到父结构体链中

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的大小不变;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值