声明:
struct stu
{
char name[20]={0};
int age=0;
char sex[5]={0};
float score=0;
}student;
typedef struct stu
{
char name[20]={0};
int age=0;
char sex[5]={0};
float score=0;
}student;
这俩种声明方式不同点在于第一种的student是结构体变量,而第二种的student是结构体类型名,其原因是因为第二种前面有typedef,typedef是类型重命名,所以产生不同。
初始化:
struct stu student={0,0,0};
struct stu students[3] = {{9801,”zhang”,20},{9802,”wang”,19},{9803,”zhao”,18}};
成员访问:
printf("%s\n"student.name);//student为变量
printf("%s\n",(*student).name);//student为指针变量
printf("%d\n",student->age);//student为指针变量
结构体成员访问的时候大多我们不是得到的结构体变量,而是得到一个指向结构体的指针。
传参:
struct stu
{
int num;
char name[10];
int age;
}p;
void fun_1(struct stu *p)
{
printf("%s\n",(*p).name);
printf("%d\n",p->age);
return;
}
void fun_2(struct stu p)
{
printf("%s\n"p.name);
return;
}
int main()
{
scanf("%d",&p.num);
scanf("%s",&p.name);
scanf("%d",&p.age);
fun_1(p);
fun_2(p);
return 0;
}
对于上面俩种传参方式,我们尽量选择第一种,因为函数传参的时候。参数需要压栈,如果传递一个结构体对象的时候,结构体过大,参数压栈的时候系统开销过大,会导致性能下降。