结构体基础知识:
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。可以分为结构体指针类型、结构体数组类型`
eg:
struct Stu
{
char name[20];
int age;
double height;
char sex;
}a[20],*P;
注意末尾分号不能丢。
结构体的成员可以是标量、数组、指针、甚至是其他结构体。
结构体变量的成员是通过点操作符(.)访问的,点操作符接受两个操作数。
eg:
Struct Stu
{
char name[20];
int age
};
Struct S s;
strcpy(s.name,"lisi");
s.age=20;//使用.age访问s的成员。
结构体内存对齐
1.第一个成员在与结构体变量偏移量为0的地址处;
2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
对齐数:编译器默认的对齐数与该成员大小的较小值
vs(8) ; li3nux(4)
3、结构体总大小为最大对齐数的整数倍(每个成员变量除了第一个成员都有一个对齐数)
4、如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的大小就是所有最大对齐数的整数倍。
结构体的内存对齐是拿空间来换取时间的做法。
eg
:`1)struct S1
{
char c1;//1
int i;//3+4->8
char c2;//1->9
};//12
printf("%d\n",sizeof(struct S1));//12
2)struct S1
{
char c1;//1
char c2;//1
int i;//2+4
};//8
printf("%d\n",sizeof(struct S1));//8
3)struct S1
{
double d;//8
char c;//1
int i;//3+4
};//16
printf("%d\n",sizeof(struct S1));//16
4)
struct S4
{
char c1;//1
struct S1 s1;//7+16
double d;//8
};//32
printf("%d\n",sizeof(struct S4));//32
结构体传参:
#include<stdio.h>
#include<stdlib.h>
struct S
{
int data[1000];
int num;
};
struct S s={{1,2,3,4},1000};
//结构体传参
void print1(struct S s)
{
printf("%d\n",s.num);
}//结构体地址传参
void print2(struct S* ps)
{
printf("%d\n",ps->num);
}
int main()
{
print1(s);
print2(&s);
system("pause");
return 0;
}
结构体传参的时候,要传结构体的地址