1.结构体的声明
1.1结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每一个成员可以是不同类型的变量。
1.2结构的声明
eg:描述一个学生:
typedef struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
}Stu:
1.3结构成员的类型
结构的成员可以是标量,数组,指针,甚至是其他结构体;
1.4结构体变量的定义和初始化
有了结构体类型,那如何定义变量,其实很简单。
struct Point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
struct Point p2;//定义结构体变量p2
//初始化:定义变量的同时赋初值。
struct Point p3={x,y};
struct Node
{
int date;
struct Point p;
struct Node*next;
}n1={10,{4,5},NULL}; //结构体嵌套初始化
struct Node n2={20,{5,6},NUll};
//嵌入就再加一个{}
2. 结构体成员的访问
结构体变量访问成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
例如:
我们可以看到s有成员name和age
那我们如何访问s的成员?
struct S s;
strcpy(s.name,"zhangsan");
s.age=20;//使用“."访问age成员
结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
那该如何访问成员。
eg:
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;
}
终结:结构体变量+”.“+成员变量
结构体变量的地址+”—>”+成员变量
3. 结构体传参
struct S
{
int data[1000];
int num;
};
struct S s = {{1,2,3,4}, 1000};
void print1(struct S s)
{
printf("%d\n",s.num);
}
void print2(struct S*ps)
{
printf("%d\n",ps->num;
}
int main()
{
print1(s);
print2(&s);
return 0;
}
上面的print1he print2函数那个好一些?
答:首选print2函数;
原因
函数传参的时候,参数是需要压栈。
如果传参一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。
结论:
结构体传参的时候,要传结构体的地址;
版权声明:本文为qq_75132460原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。