目录
结构体的声明
结构的基础知识
结构的声明
为什么要出现结构体?
结构成员的类型
结构体变量的定义和初始化
定义:(全局变量//局部变量)
初始化:
结构体成员的访问
结构体传参
结构体的声明
结构的基础知识
结构(结构体)
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
数组:一组 相同类型 元素的集合
结构的声明
struct tag {
member-list;
}variable-list;
member-list ——成员变量的列表
variable-list ——变量列表
为什么要出现结构体?
首先,结构体允许我们将不同类型的数据组合在一起,形成一个自定义的数据类型。这对于表示和操作复杂的数据结构非常有用,例如在图形学、数据库和网络编程中。
其次,结构体提供了一种将相关的数据和功能组织在一起的方式,以便更好地管理和访问这些数据。通过将相关的数据放在一起,我们可以更容易地维护和操作它们,同时也可以提高代码的可读性和可维护性。
此外,结构体还可以用于创建自定义的数据类型,以便更好地表示现实世界中的对象或概念。例如,我们可以使用结构体来表示一个学生 (复杂对象)人:名字+性别+年龄+电话+地址+
描述一个学生:
typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}Stu;//分号不能丢
"typedef" 是 C++ 编程语言中的一个关键字,它可以用来为已经存在的数据类型定义一个新的名称。这样做可以使程序更加易读易懂,也可以简化程序中的代码。示例代码如下:
typedef int myInt; // 将 int 定义为 myInt myInt a = 10; // 等价于 int a = 10;
这样,我们就可以使用 myInt 来代替 int,从而使代码更简洁易读。
Stu 是重命名产生的新的类型
结构成员的类型
在 C++ 编程语言中,结构体(struct)是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。下面是一些常见的结构体成员类型示例:
整数类型:
struct Person {
int age;
// ...
};
浮点数类型:
struct Circle {
float radius;
// ...
};
字符类型:
struct Student {
char name[20];
// ...
};
字符串类型(使用字符数组):
struct Book {
char title[50];
// ...
};
枚举类型:
enum Gender { Male, Female };
struct Employee {
Gender gender;
// ...
};
自定义结构体类型:
struct Point {
int x;
int y;
};
struct Rectangle {
Point topLeft;
};
结构体变量的定义和初始化
定义:(全局变量//局部变量)
初始化:
定义变量的同时赋初值
//按照顺序初始化:
//指定成员来初始化:
结构体成员的访问
结构变量的成员是通过点操作符(.)访问的。
点操作符接受两个操作数。
例如:
错误写法:
实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参
正确写法:
注:结构体的指针可以直接用->指向成员名
结构体传参
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); //传地址
return 0;
}
上面的 print1 和 print2 函数哪个好些?
答案是:首选print2函数。
原因:
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
结论:
结构体传参的时候,要传结构体的地址。