C enhance Day(五)

一. 回顾

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二. 结构体

2.1 基本概念

  • 定义结构体类型时不要直接给成员赋值
  • 结构体只是一个类型,还没有分配空间
  • 只有根据其类型定义变量,才分配空间,有空间后才能赋值

在这里插入图片描述

typedef struct Teacher
{
	char name[50];
	int age;
}Teacher;

int main(void)
{
	Teacher t2;
	strcpy(t2.name,"xiaoming");
	t2.age = 22;
	printf("%s,%d\n",t2.name,t2.age);

	// 结构体指针变量,没有指向空间,不能给其成员赋值
	Teacher *p = NULL;
	p = &t2;
	strcpy(p->name,"xiaojiang");
	p->age = 22;
	printf("%s,%d\n", p->name, p->age);

	return 0;
}

对应的结构体内存四区图:
在这里插入图片描述

2.2 结构体静态数组

在这里插入图片描述

2.3 结构体动态数组

int b[3] = {0};
int *pB = (int *)malloc(3 * sizeof(int));
free(pB);

// 参照上面
Teacher *p = (Teacher *)malloc(3 * sizeof(Teacher));
if(p == NULL)
{
	return -1;
}

char buf[50];
for(i = 0; i < 3; i++)
{
	sprintf(buf, "name%d%d%d",i,i,i);
	strcpy(p[i].name,buf);
	p[i].age = 20 + i;
}

for(i = 0; i < 3;i++)
{
	printf("第%d个: %s,%d\n",i+1,p[i].name,p[i].age);
}
printf("\n");

if(p != NULL)
{
	free(p);
	p = NULL;
}

2.4 结构体嵌套一级指针

< 1 > 情况1

在这里插入图片描述

< 2 > 情况2

在这里插入图片描述
结构图如下:
在这里插入图片描述

< 3 > 情况3

在这里插入图片描述
在这里插入图片描述

< 4 > 将情况3封装成函数,方法一

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主函数内容:
在这里插入图片描述

< 5 > 将情况3封装成函数,方法二

其它函数同< 4 >一样

int getMem2(Teacher **tmp, int n)
{
	if (tmp == NULL)
	{
		return -1;
	}
	
	Teacher *p = (Teacher *)malloc(sizeof(Teacher) * 3);
	int i = 0;
	char buf[30];
	for( i = 0; i < n; i++)
	{
		p[i].name = (char *)malloc(30);
		sprintf(buf,"name%d%d%d",i,i,i);
		strcpy(p[i].name,buf);

		p[i].age = 20 + 2 * i;
	}
	
	*tmp = p;
	
	return 0;
}
int main(void)
{
	Teacher *p = NULL;
	int ret = 0;
	ret = getMem2(&p,3)
	if(ret != 0)
	{
		return ret;
	}

	showTeacher(p,3);
	freeTeacher(p,3);
	p = NULL;
}

2.5 结构体嵌套二级指针

有待补充~

发布了22 篇原创文章 · 获赞 5 · 访问量 463

猜你喜欢

转载自blog.csdn.net/RedValkyrie/article/details/105355745
今日推荐