目录
结构体类型的声明
结构体变量的定义和初始化
结构体成员访问
结构体传参
1.结构体类型的声明
//1.
struct Book
{
char name[20];
int price; //成员列表
}b3,b4,b5;//全局变量
int main()
{
struct Book b1;//b1,b2局部变量
struct Book b2;
return 0;
}
//2.
struct Book
{
char name[20];
int price; //成员列表
};
int main()
{
struct Book b1;//b1,b2局部变量
struct Book b2;
return 0;
}
//3.
typedef struct
{
char name[20];
int price; //成员列表
}Book;//typedef对此结构体类型取名为Book
int main()
{
Book b1;
Book b2;
return 0;
}
1写法中b3,b4,b5是变量
3写法中Book是类型
2.结构体变量的定义和初始化
结构体成员可以是标量、数组、指针甚至是其他结构体
struct S
{
char c;
char arr[10];
int* p;
}s1,s2;
struct S s3;
struct B
{
int a;
struct S s;
double d;
}sb1, sb2;
struct S sb3;
int main()
{
struct S s4;
struct B sb4;
return 0;
}
3.结构体成员访问
struct Book
{
char name[20];
int price;
};
void print(struct Book* p)
{
printf("%s %d", p->name, p->price);
}
int main()
{
struct Book b1 = { "剑指offer",60 };
struct Book b2 = { .price = 70,.name = "C语言" };
printf("%s %d\n", b1.name, b1.price);
printf("%s %d\n", b2.name, b2.price);
print(&b1);
return 0;
}
结构体变量.结构体成员
结构体指针->结构体成员
4.结构体传参
struct S
{
int arr[100];
int n;
};
void print1(struct S ss)
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", ss.arr[i]);
}
printf("\n%d\n", ss.n);
}
void print2(struct S* ps)
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", ps->arr[i]);
}
printf("\n%d\n", ps->n);
}
int main()
{
struct S s = { {1,2,3,4,5,},100 };
print1(s);//空间较大
print2(&s);//空间较小
return 0;
}
print1和print2哪个函数更好呢?
print2更好。
1.函数传参时,参数需要压栈。
2.传递一个结构体对象时,结构体过大,参数压栈的系统开销会比较大,所以会导致性能的下降。
💭结论
结构体传参的时候,要传结构体的地址。
感谢阅读,欢迎大家批评指正!