结构体嵌套一级指针 + 结构体类型二级指针

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Person{

	char* name;
	int age;
};

struct Person** allocateSpace()
{
	int i;
	struct Person** pArray = (struct Person**)malloc(sizeof(struct Person*)* 3);

	for(i = 0;i < 3;i++)
	{
		//给每个结构体开辟内存
		pArray[i] = (struct Person*)malloc(sizeof(struct Person));

		//给每个结构体的姓名 开辟内存
		pArray[i]->name = (char*)malloc(sizeof(char)*64);

		sprintf(pArray[i]->name,"name_%d",i + 1);
		pArray[i]->age  = i + 20;
	}
	return pArray;
}
void printArray(struct Person** arr,int len)
{
	int i;
	for(i = 0;i < len;i++)
	{
		printf("姓名:%s  年龄:%d\n",arr[i]->name ,arr[i]->age );
	}
}
void freeSpace(struct Person** pArray,int len)
{
	int i;
	for(i = 0; i < len; i++)
	{
		//释放姓名空间
		if(pArray[i]->name != NULL)
		{
			free(pArray[i]->name);
			pArray[i]->name = NULL;
		}
		//释放结构体
		if(pArray[i] != NULL)
		{
			free(pArray[i]);
			pArray[i] = NULL;
		}

		//释放数组
		/*
		if(pArray != NULL)
		{
			free(pArray);
			pArray = NULL;
		}
		*/
		
	}
	//释放数组
	if(pArray != NULL)
	{
		free(pArray);
		pArray = NULL;
	}
	
}
void test01()
{
	struct Person** pArray = NULL;//(struct Person**)malloc(sizeof(struct Person*)* 3);

	pArray = allocateSpace();
	printArray(pArray,3);

	//释放内存
	freeSpace(pArray,3);
}
int main()
{
	test01();
	return 0;
}

运行结果:

姓名:name_1  年龄:20
姓名:name_2  年龄:21
姓名:name_3  年龄:22
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/weixin_42596333/article/details/104506504