——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
定义:
结构数组中的每一个元素都是具有相同结构类型的变量
格式:
struct 结构名{
成员列表;
}数组名【数组长度】;
结构体数组的初始化:
1)定义结构体数组的同时进行初始化
struct Student{
char name[21];
int age;
}boy[3]={{"aaa",18},{"bbb",21},{"ccc",33}};
2)定义数组的同时进行初始化:
struct Student girls={{"aaa",18},{"bbb",21},{"ccc",33}};
3)先定义,后初始化,整体赋值
struct Student da[2];
da[0]=(struct Student){"kkk",18};
4)先定义结构体数组,然后初始化
struct Student stu[2];
//strcpy(stu[0].name,"zhangsan");
scanf("%s",stu[0].name);
结构数组的遍历:
用for循环就可以了,和普通数组遍历一样
指向结构体变量的指针:
一般形式:struct 结构体名 *结构指针变量名
struct Student *p=stu1;
结构体指针访问成员变量的形式:
1)(*指针变量名).成员名
2)结构指针变量->成员名
结构体嵌套使用
嵌套回顾:
1)if语句
2)三目运算符嵌套
3)for循环
4)递归函数
结构体嵌套:
成员是一个结构,构成了嵌套的结构。
结构体定义里面有其他结构体。
结构体不可以嵌套自己变量,可以嵌套指向自己这种类型的指针。
嵌套的结构体如何进行初始化?
struct Student stu1={"张三丰",28,59.99f,{1220,12,22}};//包含的结构体可以在内部进行初始化
3)结构体嵌套自身的指针
struct Person{
char *name;
int age;
struct Person *child;
}
struct Person kim={"kim",8,NULL};
struct Person lin ={"Lzy",38,&kim};
printf("%s的儿子是:%s,儿子的年龄是:%d\n",lin.name,(*lin.child).name,(*lin.child).age);
printf("%s的儿子是:%s,儿子的年龄是:%d\n",lin.name,lin.child->name,lin.child->age);
用结构体变量名作为函数的形参,属于值传递,对实参是无法进行修改的。
结构体指针作为函数的参数,用结构体变量的地址传递给函数,在函数中传递过来一个指针,这个指针指向实参,当调用这个函数时,在栈中为函数分配存储空间,但是空间中存储的不是实参的值,而是实参中值的地址,当形参修改成员时,就会通过地址找到实参的值,从而对实参进行修改