文章目录
- 1.结构体的声明
- 1.1 结构体的基础知识
- 1.2 结构的声明
- 1.3 结构成员的类型
- 1.4结构体变量的定义和初始化
- 2.结构体成员的访问
- 3.结构体传参
1.结构体的声明
1.1 结构体的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
如果说数组是一组相同类型元素的集合,那么结构体就是一组不一定相同元素的集合
1.2 结构的声明
struct tag
{member-list;
}variable-list;
当我们描述一个学生时:
struct stu
{char name[10];//姓名int age;//年龄char sex[10];//性别
};
1.3 结构成员的类型
结构成员可以是标量、数组、指针,甚至是其它结构体
1.4结构体变量的定义和初始化
有了结构体类型,那么接下来就要定义变量了。
//代码1
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年龄char sex[10];//性别
};int main()
{struct stu s = { "yui",17,"female" };printf("姓名:%s 年龄:%d 性别:%s\n", s.name, s.age, s.sex);return 0;
}
//打印结果:姓名:yui 年龄:17 性别:female//代码2struct Point
{int x;int y;
}p1;//声明类型的同时定义变量p1;struct Point p2//定义结构体变量p2//初始化:定义变量的同时赋初值
struct Point p3 = {x,y};struct stu
{char name[10];int age;
};struct stu s = {"yui",17};//初始化struct node
{int data;struct Point p;struct node* next;
}n1 = {10,{4,5},NULL};//结构体嵌套初始化struct node n2 = {20,{5,6}.NULL}//结构体嵌套初始化
2.结构体成员的访问
- 结构体变量访问成员
结构体变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
例如:
struct stu
{char name[10];int age;
};
struct stu s;
我们可以看到s
有成员name``````age
那我们如何访问s的成员?
struct stu s;
strcpy(stu.name,"yui");//使用.访问name成员
s.age = 20;//使用.访问age成员
- 结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年龄char sex[10];//性别
};void print(struct stu* ps)
{//使用结构体指针访问指向对象的成员printf("姓名:%s 年龄:%d 性别:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{struct stu s = { "yui",17,"female" };print(&s);//结构体地址传址return 0;
}//打印结果:
//姓名:yui 年龄:17 性别:female
3.结构体传参
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年龄char sex[10];//性别
};
//结构体传参
void print1(struct stu s)
{printf("姓名:%s 年龄:%d 性别:%s\n", s.name, s.age,s.sex);
}
//结构体地址传参
void print2(struct stu* ps)
{printf("姓名:%s 年龄:%d 性别:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{struct stu s = { "yui",17,"female" };print1(s);//传结构体print2(&s);//传地址return 0;
}
//打印结果:
/*
姓名:yui 年龄:17 性别:female
姓名:yui 年龄:17 性别:female
*/
如果我们要对函数传递结构体时,传地址会更好。
函数传参的时候,参数是要压栈的。
如果传递的结构体太大了,参数压栈的系统开销比较大,所以会导致性能的下降。
如果你需要保留函数中对结构体的修改,也是需要传递地址的。
综上:
结构体传参的时候,尽量传结构体的地址。
完