一. 回顾
二. 结构体
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 结构体嵌套二级指针
有待补充~