结构体的声明
结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构的声明和创建
- 写法一:
cpp
struct Book
{
char name[20]; //成员变量1
int price; //成员变量2
};
int main()
{
struct Book b1;
struct Book b2;
return 0;
}
这里创建的b1,b2是局部变量。
- 写法二:
cpp
struct Book
{
char name[20]; //成员变量1
int price; //成员变量2
}b1,b2;
int main()
{
return 0;
}
这里创建的b1,b2是全局变量。
- 写法三:
cpp
typedef struct Book
{
char name[20];
int price;
}Book; //对这个类型重新命名为Book
int main()
{
Book b1; //这里的类型必须和声明时命名一致
Book b2;
return 0;
}
cpp
struct Book
{
char name[20];
int price;
};
typedef struct Book Book;
int main()
{
Book b1;
Book b2;
return 0;
}
这样两种写法都可以,这里创建b1,b2时可以不加前面的struct。
结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
cpp
struct S
{
char c;
char arr[10];
int* p;
};
struct B
{
int a;
double d;
struct S s;
};
int main()
{
return 0;
}
结构体变量的定义和初始化
初始化:定义(创建)变量的同时赋初值。
结构体成员的访问
- 结构体变量访问成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
- 结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
结构体传参
结构体传参的时候,要传结构体的地址。
结构体传参传结构体变量的缺点。
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
所以结构体传参优先传结构体地址!!!