如何定义一个结构体:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
};//分号不能丢
这样就可以简单的定义一个结构体,现在只是定义了一个结构体并没有使用,相当于是图纸,并没有占用空间。
结构体的变量定义:两种方式。以下两种方式都可以。
struct Point
{
int x;
int y; }p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
当然也可以对结构体改名字:
typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}Student;//分号不能丢
这样创建结构体变量的时候就可以直接使用Student.
结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
![](https://i-blog.csdnimg.cn/blog_migrate/a9ea14dc39ffecf325953fa941762f91.png)
//初始化:定义变量的同时赋初值。
struct Point p3 = {x, y};
struct Stu //类型声明
{
char name[15];//名字
int age; //年龄
};
struct Stu s = {"zhangsan", 20};//初始化
结构体的嵌套访问:
结构体的数据打印:
当然打印也可以传地址过去。
struct Stu
{
char name[20];
int age;
};
void print(struct Stu* ps) {
printf("name = %s age = %d\n", (*ps).name, (*ps).age);
//使用结构体指针访问指向对象的成员
printf("name = %s age = %d\n", ps->name, ps->age);
}
int main()
{
struct Stu s = {"zhangsan", 20};
print(&s);//结构体地址传参
return 0; }
函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈
的的系统开销比较大,所以会导致性能的下降。
结论:
结构体传参的时候,要传结构体的地址。
![](https://i-blog.csdnimg.cn/blog_migrate/2a2da5f74d54c612e65dbfc7b5fb2e56.png)