博客名:平凡的小苏
学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情
struct tag
{
member-list;//成员列表
}variable-list;
例如描述一个学生:
struct Stu
{
//结构体成员
char name[20];
int age;
char sex[10];
float score;
} s4,s5;//s4, s5也是结构体变量的 - 全局的
struct Stu s6;
int main()
{
struct Stu s1, s2, s3;//s1,s2,s3也是结构体变量的 - 局部的
return 0;
}
例如:
struct Stu
{
//结构体成员
char name[20];
int age;
char sex[10];
float score;
};
int main()
{
struct Stu s1 = {"zhangsan", 20, "nan", 95.5f};
struct Stu s2 = { "旺财", 21, "保密", 59.5f };
printf("%s %d %s %.1f\n", s2.name, s2.age, s2.sex, s2.score);
return 0;
}
结构体嵌套初始化
#include
struct S
{
int a;
char c;
};
struct P
{
double d;
struct S s;
float f;
};
int main()
{
struct P p = { 5.5,{10,'b'},3.14f };
printf("%lf %d %c %f\n", p.d, p.s.a, p.s.c, p.f);
return 0;
}
#include
struct S
{
int a;
char c;
};
struct P
{
double d;
struct S s;
float f;
};
void Print1(struct P sp)
{
//结构体变量.成员
printf("%lf %d %c %f\n", sp.d, sp.s.a, sp.s.c, sp.f);
}
int main()
{
struct P p = { 5.5,{10,'b'},3.14f };
Print1(p);
return 0;
}
#include
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;
}
注意:这里建议将结构体进行传址调用,函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
使用传址调用传的是4个字节的地址,使用效率较高,不会造成空间的浪费。