1、结构体的声明
数组是相同类型的元素的集合,而结构是不同类型的元素的集合,也称为结构体。
struct Student(结构体类型名)
{
int num;(结构体成员)char name[20];
char sex[20];
float score;
(结构体成员也可以为另一个结构体类型)
};
2、结构体变量的定义和初始化
2.1 结构体变量的定义
1、先声明结构体类型,再定义该类型变量
struct Student
{
int num;char name[20];
char sex[20];
float score;
};
struct Student s1,s2;
2、在声明结构体类型的同时定义结构体变量
struct Student
{
int num;char name[20];
char sex[20];
float score;
} s1,s2 ;
3、不指定结构体类型名而直接定义结构体变量
struct 指定了一个无名的结构体类型,但必须定义结构体变量
{
int num;char name[20];
char sex[20];
float score;
} s1,s2 ;
2.2 结构体变量的初始化
struct Student
{
int num;char name[20];
char sex[20];
float score;
};
struct Student s1 = { 5,"zhangsan","nan",95.5f };
3、结构体成员的访问
- 结构体变量访问成员 :用操作符(.)
- 结构体指针访问指向变量的成员:用 ->
(*p) . name <==> p -> name
4、结构体传参
#include<stdio.h>
struct S
{
int data[20];
int num;
char ch;
};
struct S s = { {1,2,3,4,5} ,6,'a' };
//结构体传参
void print1(struct S ps)
{
printf("%d,%c\n", ps.num, ps.ch);
}
//结构体地址传参
void print2(struct S* qs)
{
printf("%d,%c\n", qs->num, qs->ch);
}
int main()
{
print1(s); //传结构体
print2(&s); //传结构体地址
return 0;
}
函数可以传参调用,也可以传址调用。函数传参的时候,参数是需要压栈的。如果传递一个结构体,由于结构体过大,参数压栈的系统开销较大,会导致性能下降,因此, 结构体传参的时候,最好传结构体的地址。