<C++> 结构体 的全角度解答_定义结构体stu_t 结构体成员 string name int age; 编写函数 实现 1)键(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

}

int main() {
	//结构体数组
	struct student arr[3]=
	{
		{"张三",18,80 },
		{"李四",19,60 },
		{"王五",20,70 }
	};

	for (int i = 0; i < 3; i++)
	{
		cout << "姓名:" << arr[i].name << " 年龄:" << arr[i].age << " 分数:" << arr[i].score << endl;
	}

	system("pause");

	return 0;
}



---

 ## 三、结构体指针

 **通过指针访问结构体中的成员**

 利用操作符 ->可以通过结构体指针访问结构体属性

 代码如下:

 

//结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};

int main() {
	
	struct student stu = { "张三",18,100, };
	
	struct student \* p = &stu;
	
	p->score = 80; //指针通过 -> 操作符可以访问成员

	cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
	
	system("pause");

	return 0;
}



---

 ## 四、结构体嵌套

 **结构体中的成员是另一个结构体**  
 就像:一个类的对象可以嵌套在另一个类中一样

 例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体

 举例:Costs 结构体有两个 double 类型成员,wholesale 和 retail。Item 结构体有 3 个成员,前 2 个是 partNum 和 description,它们都是 string 对象。第 3 个是 pricing,它是一个嵌套的 Costs 结构体。如果定义了一个名为 widge t的 Item 结构体:下图就是结构图  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d600010b94aa448f966b31f32c5357e3.png)  
 定义代码:

 

struct Costs
{
double wholesale;
double retail;
};

struct Item
{
string partNum;
string description;
Costs pricing;
};

 访问顺序可以是:

 

widget.partnum = “123A”;
widget.description = “iron widget”;
widget.pricing.wholesale = 100.0;
widget.pricing.retail = 150.0;

 这里**wholesale 和 retail 不是 widget 的成员,pricing 才是。要访问 wholesale 和 retail,必须首先访问 widget 的定价 pricing**




---

 ## 五、结构体函数参数

 **将结构体作为参数向函数中传递**



> 
> 三种结构体初始化方法:  
>  **1. 利用结构体自带的默认构造函数  
>  2. 利用带参数的构造函数  
>  3. 利用默认无参的构造函数**
> 
> 
> 

 

struct node{
int data;
string str;
char x;
//注意构造函数最后这里没有分号的
node() :x(), str(), data(){}
//无参数的构造函数数组初始化时调用,使用的是结构体自带的默认构造函数
node(int a, string b, char c) :data(a), str(b), x©{}//有参构造
};

 ### 🔥传递方式

 有`两种:`  
 **●值传递  
 ●地址传递**

 举例:

 
//学生结构体定义
struct student
{
	//成员列表
	string name;  //姓名
	int age;      //年龄
	int score;    //分数
};

//值传递
void printStudent(student stu )
{
	stu.age = 28;
	cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;
}

//地址传递
void printStudent2(student \*stu)
{
	stu->age = 28;
	cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age  << " 分数:" << stu->score << endl;
}

int main() {

	student stu = { "张三",18,100};
	//值传递
	printStudent(stu);
	cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;

	cout << endl;

	//地址传递
	printStudent2(&stu);
	cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;

	system("pause");

	return 0;
}


> 
> 🎁**总结:****如果不想修改主函数中的数据,用值传递,反之用地址传递**  
>     
>  *默认情况下,它们通过值传递,这意味着需要生成整个原始结构的副本并传递给函数。因为不希望浪费时间来复制整个结构体,所以,除非结构很小,否则一般会通过引用将结构体传递给函数。但是,这样意味着函数可以访问原始结构的成员变量,从而可能更改它们。如果不想让函数更改任何成员变量值,那么可以考虑将结构体变量作为一个常量引用传递给函数*
> 
> 
> 

 ## 六、结构体案例

 **`案例描述:`**

 **设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄  
 通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序,最终打印排序后的结果**

 *五名英雄信息如下:*

 
	{"刘备",23,"男"},
	{"关羽",22,"男"},
	{"张飞",20,"男"},
	{"赵云",21,"男"},
	{"貂蝉",19,"女"},
 代码如下:

 
//英雄结构体
struct hero
{
	string name;
	int age;
	string sex;
};
//冒泡排序
void bubbleSort(hero arr[] , int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j].age > arr[j + 1].age)
			{
				hero temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
//打印数组
void printHeros(hero arr[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << "姓名: " << arr[i].name << " 性别: " << arr[i].sex << " 年龄: " << arr[i].age << endl;
	}
}

int main() {

	struct hero arr[5] =
	{
		{"刘备",23,"男"},
		{"关羽",22,"男"},
		{"张飞",20,"男"},
		{"赵云",21,"男"},
		{"貂蝉",19,"女"},
	};

	int len = sizeof(arr) / sizeof(hero); //获取数组元素个数

	bubbleSort(arr, len); //排序

	printHeros(arr, len); //打印

	system("pause");

	return 0;
}

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

[外链图片转存中…(img-RHclV0Sr-1715892863930)]
[外链图片转存中…(img-2uhKk0qg-1715892863930)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值