c++学习笔记07 结构体

本文详细介绍了C++中的结构体,包括如何定义结构体、创建结构体变量、结构体数组、结构体指针、结构体嵌套结构体以及结构体在函数中的使用。同时,讲解了结构体在函数参数传递中的值传递和地址传递,并展示了const在结构体中的应用,强调了const在防止意外修改结构体数据的作用。
摘要由CSDN通过智能技术生成
用途

用于自定义数据类型,一些基本类型的集合组成的一个类型

基本形式
sturct 结构体名{成员列表}
定义结构体并创建结构体变量

定义结构体

struct Student
{
	string name;
	int age;
	int score;
}

创建结构体有3种办法
法1:先创建结构体变量再给结构体变量的属性赋值

//法1:先定义结构体变量再给结构体变量的属性赋值
Student s1;
s1.name = "zhangSan";
s1.age = 18;
s1.score = 80;

法2:创建结构体变量时同时给属性赋值

struct Student s2 = { "liSi",19,100 };

法3:定义结构体时顺便创建一个结构体变量

struct Student
{
	string name;
	int age;
	int score;
}s3;//法3:定义结构体时顺便创建一个结构体变量
结构体数组
struct Student stuArray[3] =
{
	{ "liSi",19,100 },
	{ "WangWu",8,70 },
	{ "ZhaoLiu",50,30 }

};
结构体指针

结构体指针
直接访问结构体变量的属性时,用 结构体变量名.属性名即可访问 如:stu1.name
使用指针来访问结构体变量的属性的时候用 指针变量名->结构体变量的属性名 如:p->name

struct Student s = { "liSi",19,100 };
struct Student* p = &s;//指针指向结构体变量
p->score = 80;
cout << "name: " << p->name << " age: " << p->age << " score: " << p->score << endl;
结构体嵌套结构体

结构体的子结构体要在结构体之前定义以免报错

struct Student  //学生是老师结构体的子结构体,要在老师结构体前定义
{
	string name;
	int age;
	int score;
};
struct Teacher
{
	string name;
	int id;
	struct Student stu;

};

结构体的子结构体在结构体后面加一个. 比如:t.stu.name
主程序中使用范例:

Teacher t;
t.name = "wanglaoshi";
t.id = 010001;
t.stu.name = "herman";
t.stu.age = 10;
t.stu.score = 100;
结构体与函数

区别结构体的值传递与地址传递

void printStruct_value(struct Student s1)//值传递
{
	s1.age = 200;
	cout << "val    name: " << s1.name << " age: " << s1.age << " score: " << s1.score << endl;
}
void printStruct_address(struct Student *p)//地址传递
{
	p->age = 400;
	cout << "address    name: " << p->name << " age: " << p->age << " score: " << p->score << endl;
}

主程序使用:

printStruct_value(stu);
printStruct_address(&stu);
结构体中const的使用

结构体数组传入函数时,常常量大,为避免值传递新建空间消耗内存过多,常使用地址传递,指针只占用4个字节
同时为了避免地址传递类型的函数不小心修改了结构体变量的值,在传入函数时,命名成常量指针
以便于读数据时不对数据进行修改,可以理解为**“只读”模式**
这个‘常量不可修改’的限制只在函数内存在,因为不是这个结构体变量本身变成了常量,而是只有在使用这个指针时才会受到const的限制

错误示例:

void printStruct(const struct  Student*  p)//const的使用
{
	p->age = 400;//报错:试图修改常量
	cout << "address    name: " << p->name << " age: " << p->age << " score: " << p->score << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值