1.1 结构体类型定义及结构体变量定义
1.1.1
略过
1.2 结构体做函数参数
1.2.1 结构体赋值编译器行为研究
typedef struct Teacher
{
char name[32];
int age;
} Teacher;
int main()
{
Teacher t1 ={"zhangsan",32};
Teacher t2 ;
t2 =t1; //=号操作下 编译器的行为
//编译器给我们提供 简单 =号 赋值操作 。。。我们要顺从
printf("t2.name =%s\n",t2.name);
printf("t2.age =%d\n",t2.age);
return 0;
}
1.2.2 结构体变量做函数参数 VS结构体指针做函数参数
typedef struct Teacher
{
char name[32];
int age;
} Teacher;
void copyTeacher1(Teacher to, Teacher from)
{
to =from;
}
void copyTeacher2(Teacher *to, Teacher *from)
{
*to = *from;
}
int main()
{
Teacher t1 ={"zhangsan",32};
Teacher t2 ;
//copyTeacher1(t2,t1); //error
copyTeacher2(&t2,&t1);
printf("t2.name =%s\n",t2.name);
printf("t2.age =%d\n",t2.age);
return 0;
}
1.2.3
1.3 结构体中套一级指针
1.3.1
typedef struct Teacher
{
char name[32];
char * aliname;
int age;
} Teacher;
int GetTeacher(Teacher ** pt ,int num)
{
int i =0;
Teacher * tmp = NULL;
tmp = (Teacher*)malloc(sizeof(Teacher)*num);
if(tmp == NULL) return -1;
memset(tmp,0,sizeof(Teacher) * num );
for(i =0;i<num ;i++)
{
tmp[i].aliname = (char*)malloc(30);
}
*pt =tmp; //二级指针 形参 去间接的修改 实参 的值
return 0;
}
void freeTeacher(Teacher **p ,int num)
{
int i =0;
Teacher * tmp =NULL;
if(p == NULL) return ;
tmp = *p;
for(i =0;i<num;i++)
{
if(tmp[i].aliname != NULL)
free(tmp[i].aliname);
}
free(tmp);
*p = NULL;
}
1.4 结构体中套二级指针
1.4.1
typedef struct Teacher
{
char name[32];
char * aliname;
char **stuname;
int age;
} Teacher;
int GetTeacher(Teacher ** pt ,int num)
{
int i =0,j=0;
Teacher * tmp = NULL;
tmp = (Teacher*)malloc(sizeof(Teacher)*num);
if(tmp == NULL) return -1;
memset(tmp,0,sizeof(Teacher) * num );
for(i =0;i<num ;i++)
{
char ** p= NULL;
tmp[i].aliname = (char*)malloc(30);
p = (char**)malloc(sizeof(char*) *3);
for( j = 0; j<3;j++)
{
p[j] =(char*)malloc(120);
}
tmp[i].stuname = p;
}
*pt =tmp; //二级指针 形参 去间接的修改 实参 的值
return 0;
}
void freeTeacher(Teacher **p ,int num)
{
int i =0;
Teacher * tmp =NULL;
if(p == NULL) return ;
tmp = *p;
for(i =0;i<num;i++)
{
if(tmp[i].aliname != NULL)
free(tmp[i].aliname);
}
free(tmp);
*p = NULL;
}
参考一 : 狄泰软件课程
参考二 : 传智扫地僧老师课程
如有侵权:请联系邮箱 1986005934@qq.com