作用: 结构体中的成员可以是另一个结构体
**例如:**每个同学可以拥有很多个偶像,一个同学的结构体中,记录很多个偶像的结构体
示例:
//学生结构体定义
#include
#include
using namespace std;
struct likes_idol
{
//成员列表
string name; //姓名
string country;
int age; //年龄
double height; //身高(米)
};
//教师结构体定义
struct student
{
//成员列表
int id; //学生学号
string name; //学生姓名
int age; //学生年龄
struct likes_idol b; //子结构体偶像
};
int main() {
struct student s1;
s1.id = 20428;
s1.name = "小侯";
s1.age = 18;
s1.b.age = 19;
s1.b.country = "Japan";
s1.b.height = 1.79;
s1.b.name = "道枝骏佑" ;
cout <
**总结:**在结构体中可以定义另一个结构体作为成员,用来解决实际问题
1.2 结构体做函数参数**作用:**将结构体作为参数向函数中传递
传递方式有两种:
- 值传递
- 地址传递
示例:
//学生结构体定义
struct likes_idol
{
//成员列表
string name; //姓名
string country;//国家
int age; //年龄
double height; //身高
};
//值传递
void print_idol(likes_idol idol1 )
{
idol1.age = 18;
cout << "子函数中 姓名:" << idol1.name << " 年龄: " << idol1.age << " 国籍:" << idol1.counrty<<"身高:"<age = 28;
cout << "子函数中 姓名:" << idol2->name << " 年龄: " << idol2->age << " 国籍:" << idol2->counrty<<"身高:"<height << endl;
}
int main() {
likes_idol idol = {"道枝骏佑","Japan",19,1.79};
//值传递
printStudent(idol);
cout << "主函数中 姓名:" << idol.name << " 年龄: " << idol.age << " 国籍:" << idol.counrty<<"身高:"<
1.3结构体中 const使用场景总结:如果不想修改主函数中的数据,用值传递,反之用地址传递,和普通变量一样。
**作用:**用const来防止误 *** 作
示例:
//偶像结构体定义
struct likes_idol
{
//成员列表
string name; //姓名
string country;//国家
int age; //年龄
double height; //身高
};
//const使用场景
void print_idol(const likes_idol idol1) //加const防止函数体中的误 *** 作
{
idol1.age = 18;// *** 作失败因为加了const修饰
cout << "子函数中 姓名:" << idol1.name
<< " 年龄: " << idol1.age << " 国籍:"
<< idol1.counrty<<"身高:"<
1.4结构体数组嵌套结构体数组
要求: 有五个学生,每个学生最喜欢的两本书。
打印出学生的姓名以及对应喜欢书名和作者。
示例:
#include
#include
using namespace std;
typedef string str;
struct book
{
str b_name;
str b_author;
};
struct friends
{
str fr_name;
book likes[2];
};
void allocateSpace(friends fr_Array[] , int len)
{
str fr_Name = "h_";
str b_Name = "三体_";
str b_Author = "s_";
str fr_Seed = "ABCDE";
str b_Seed = "12";
str b_a_Seed = "12";
for (int i = 0; i < len; i++)
{
fr_Array[i].fr_name = fr_Name + fr_Seed[i];
for (int j = 0; j < 2; j++)
{
//字符串连接符
fr_Array[i].likes[j].b_name = b_Name + b_Seed[j];
fr_Array[i].likes[j].b_author =b_Author+b_a_Seed[j];
}
}
}
void printfriends(friends fr_Array[], int len)
{
for (int i = 0; i < len; i++)
{
cout <
输出:
h_A
三体_1 s_1
三体_2 s_2
h_B
三体_1 s_1
三体_2 s_2
h_C
三体_1 s_1
三体_2 s_2
h_D
三体_1 s_1
三体_2 s_2
h_E
三体_1 s_1
三体_2 s_2
请按任意键继续. . .
注意: 如果出现这样的错误
提示:
25 E:\C++程序1\h_struct\Makefile.win recipe for target 'h_struct.exe' failed
原因:
有可能是上一次运行的窗口控制台没有关闭。
要求: 设计一个小侯偶像的结构体,包括成员姓名,年龄,性别,身高,体重,国籍;创建结构体数组,数组中存放3名小侯的偶像。
通过冒泡排序的算法,将数组中的偶像按照身高进行升序排序,最终打印排序后的结果。
#include
#include
using namespace std;
struct idol
{
string name;
int age;
string sex;
float height;
string nation;
};
//冒泡排序
void bubbleSort(idol arr[] , int len)
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j].height > arr[j + 1].height)
{
//创建中间的结构体变量,用于传递数据
idol temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//打印数组
void print_idols(idol arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << " " << arr[i].name << " " << arr[i].sex << " " << arr[i].age << " " <<arr[i].height<<" " <<arr[i].nation<<endl;
}
}
int main() {
struct idol arr[3] =
{
{"白敬亭",28,"男",1.83,"China"},
{"赵丽颖",32,"女",1.65,"China"},
{"道枝骏佑",19,"男",1.79,"Japan"}
};
int len = sizeof(arr) / sizeof(idol); //获取数组元素个数
bubbleSort(arr, len); //排序
print_idols(arr, len); //打印
system("pause");
return 0;
}
输出:
赵丽颖 女 32 1.65 China
道枝骏佑 男 19 1.79 Japan
白敬亭 男 28 1.83 China
请按任意键继续. . .
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)