概述
1、结构体数组
作用:结构体数组的作用是将自定义的结构体放到数组中方便维护
//结构体定义
struct sanguo//三国
{
string name;//姓名
int age; //年龄
string sex; //性别
};
int main()
{
//结构体数组
struct sanguo hero[5] = {
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"},
};//初始化
system("pause");
return 0;
}
2、结构体指针
作用:通过指针访问结构体中的成员
利用操作符->可以通过结构体指针访问结构体属性
#include<string>
#include<iostream>
using namespace std;
//结构体定义
struct student
{
string name;//姓名
int age; //年龄
int score; //分数
};
int main()
{
//创建学生结构体变量
struct student stu={"宁子",20,100};
//通过指针指向结构体变量
struct student *p=&stu;
//通过指针访问结构体中的变量
p->score=59;
//输出结构体
cout<<"学生姓名:"<<stu.name <<"n"<<"学生年龄:"<<stu.age <<"n"<<"学生分数:"<<stu.score<<endl;
system("pause");
return 0;
}
我们通过结构体指针访问到了学生的成绩并作出修改
可以看出通过指针访问我们将学生成绩从100改为了59(抱歉了宁子)
当然我们也可以通过结构体指针访问其他的变量
cout<<"学生姓名:"<<p->name <<"n"<<"学生年龄:"<<p->age <<"n"<<"学生分数:"<<p->score<<endl;
总结 结构体指针可以通过 '->' 访问结构体成员
结构体指针访问结构体数组
#include<string>
#include<iostream>
using namespace std;
//定义学生结构体
struct student
{
string name;//姓名
int age; //年龄
int score; //分数
};
int main()
{
int i;
struct student stu[3];//创建结构体
struct student *p=stu;//数组本身就代表了地址 所以不用加&
for(i=0;i<3;i++,*p++)
{
cin>>p->name>>p->age>>p->score;//循环输入结构体数组
}
for(i=0;i<3;i++)
{
//循环输出
cout<<stu[i].name<<"n"<<stu[i].age<<"n"<<stu[i].score<<endl;
}
system("pause");
return 0;
}
3、结构体嵌套结构体
结构体的成员可以是另一个结构体
例如一位老师带一名学生,一个老师的结构体中记录一个学生的结构体
//定义学生结构体
struct student
{
string name;//姓名
int score; //分数
};
//定义老师结构体
struct teacher
{
string name;
struct student stu;//老师带一位学生
};
该怎么访问还怎么访问
struct teacher th;//创建结构体
th.name="李雷";
th.stu.name="张三";
th.stu.score=88;
我们也可以使用结构体指针来访问
struct teacher *p=&th;
p->name="李雷";
p->stu.name="张三";
p->stu.score=88;
4、结构体做函数参数(值传递)
作用:将结构体作为参数向函数中传递
#include<string>
#include<iostream>
using namespace std;
//定义学生结构体
struct student
{
string name;//姓名
int age; //年龄
int score; //分数
};
void outstruct(struct student q);//结构体输出函数
int main()
{
int i;
struct student stu={"张三",18,100};//创建结构体 //初始化
outstruct(stu);
return 0;
}
void outstruct(struct student q)
{
cout<<q.name<<endl;
cout<<q.age<<endl;
cout<<q.score<<endl;
}
要注意的是这种传递传递的仅仅是结构体的值 在函数中对参数作出修改不会影响主函数中的值
void outstruct(struct student q)
{
q.age=55;//在函数中令age=55
cout<<q.name<<endl;
cout<<q.score<<endl;
cout<<"in outstruct: age= "<<q.age<<endl;
}
//在main函数中做以下操作
outstruct(stu);
cout<<"in main: age= "<<stu.age;
可以看出main中的age并没有作出改变
5、结构体指针做函数参数(地址传递)
#include<string>
#include<iostream>
using namespace std;
//定义学生结构体
struct student
{
string name;//姓名
int age; //年龄
int score; //分数
};
void getstruct(struct student *q);//输入结构体函数
int main()
{
struct student stu;//创建结构体
getstruct(&stu);
cout<<stu.name<<"n"<<stu.age<<"n"<<stu.score<<endl;//输出
return 0;
}
void getstruct(struct student *q)
{
cin>>q->name;
cin>>q->score;//输入
cin>>q->age;
}
要注意的是这种传递传递的是结构体的地址 在函数中对参数作出修改会影响主函数中的值
6、结构体案例1
案例描述:学校中一位老师带五个学生,总共有三名老师,设计学生和老师的结构体 在老师结构体中包括老师姓名和五位学生的结构体,学生结构体包括姓名和考试分数,创建数组保存三位老师,通过函数给老师和学生赋值,通过函数实现输出老师数据以及学生数据。
完整代码如下
#include<string>
#include<iostream>
using namespace std;
//定义学生结构体
struct student
{
string name;
int score;
};
//定义老师结构体
struct teacher
{
string name;
struct student xs[5];//包含学生结构体数组(5)
}ls[3];//创建老师结构体数组
void getstruct(struct teacher *tc);//结构体输入函数
void outstruct(struct teacher *q);//结构体输出函数
int main()
{
getstruct(ls);
outstruct(ls);
return 0;
}
void getstruct(struct teacher* tc)
{
int i,j;
for (i = 0; i < 3; i++, *tc++)
{
cin >> tc->name;
for (j = 0; j < 5; j++)
{
cin >> tc->xs[j].name;//循环
cin >> tc->xs[j].score;//输入
}
}
}
void outstruct(struct teacher *q)
{
int i, j;
cout<<endl;
for (i = 0; i < 3; i++)
{
cout << q->name<<endl;
for (j = 0; j < 5; j++)
{
cout << q->xs[j].name<<" ";//循环
cout << q->xs[j].score<<endl;//输出
}
}
}
结构体案例2
案例描述:
设计一个英雄的结构体包括姓名 年龄 性别,创建结构体数组,数组中存放五位英雄,通过冒泡排序将数组中的英雄按照年龄进行升序排序,打印排序完成后的结构体数组。
五名英雄信息如下
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"},
完整代码如下:
#include<string>
#include<iostream>
using namespace std;
//定义英雄结构体
struct sanguo
{
string name;
int age;
string sex;
};
int main()
{
int i,j;
//创建英雄结构体数组
struct sanguo hero[5] = {
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"},
};
struct sanguo alg;//创建中间结构体变量
for (i = 0; i < 5; i++)
{
for(j=0;j<4;j++)
{
if (hero[j].age > hero[j + 1].age)
{
alg = hero[j];
hero[j] = hero[j + 1];//冒泡排序
hero[j + 1] = alg;
}
}
}
for(i=0;i<5;i++)
{
//输出结构体数组
cout << hero[i].name << hero[i].age << hero[i].sex << endl;
}
return 0;
}
最后
以上就是单身奇异果为你收集整理的结构体数组与指针与函数及应用案例1、结构体数组2、结构体指针3、结构体嵌套结构体4、结构体做函数参数(值传递)5、结构体指针做函数参数(地址传递)6、结构体案例1 结构体案例2的全部内容,希望文章能够帮你解决结构体数组与指针与函数及应用案例1、结构体数组2、结构体指针3、结构体嵌套结构体4、结构体做函数参数(值传递)5、结构体指针做函数参数(地址传递)6、结构体案例1 结构体案例2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复