1. 结构体类型的声明
2. 结构体变量的创建和初始化
3. 结构成员访问操作符
4. 结构体内存对⻬
5. 结构体传参
一、结构体类型的声明
1.1结构体的声明
struct student
{
int age;
int id[10];
char name[10];
};
1.2 结构体变量的初始化
struct student
{
int age;
char id[10];
char name[10];
};
int main()
{
// 1. 按照顺序初始化
struct student s = { 18,"22021111","张三" };
printf("%d %s %s\n", s.age, s.id, s.name);
//2. 不按顺序初始化
struct student s1 = { .id = "2222555",.age = 28,.name = "王五"};
printf("%d %s %s\n", s1.age, s1.id, s1.name);
return 0 ;
}
三、这里我们在原来的知识中已经介绍过了
这里我们需要注意的是,我们在使用结构体的时候,尽量要给结构体变量命名。
四、结构体内存对齐
我们通过上边的学习已经初步掌握了结构体的基本使用了。
现在我们深入讨论一个问题:计算结构体的大小。
这也是一个特别热门的考点:结构体内存对齐
4.1 结构对齐
我们首先需要知道对齐规则
注意:这里需求到一个偏移量的知识
我们来举例子练习一下
#include<stdio.h>
struct s1
{
char a1;
int a2;
int a3;
};
int main()
{
printf("%zd\n", sizeof(struct s1));
return 0;
}
struct s3
{
char nun1;
int nun2;
double nun3;
};
int main()
{
printf("%zd\n", sizeof(struct s3));
return 0;
}
struct s3
{
char nun1;
int nun2;
double nun3;
};
struct s4
{
char b1;
struct s3;
int b2;
};
int main()
{
printf("%zd\n", sizeof(struct s4));
return 0;
}
五、结构体传参
我们从两方面解释
1.传值
2.传址
struct s1
{
int a ;
char name[20];
};
void print_data(struct s1 num)//传值
{
num.a = 20;
printf("%d\n", num.a);
}
void print_score(struct s1* pr) //传址
{
pr->a = 30;
printf("%d\n", pr->a);
}
int main()
{
struct s1 num = { 10,"lisi" };
print_data(num);
printf("%d\n", num.a);
print_score(&num);
printf("%d\n", num.a);
return 0;
}
结论:在我们传参的时候,要传结构体的地址