/*结构体属于用户自定义的数据类型, 允许用户存储不同的数据类型,
语法:struct 结构体名{结构体成员列表} ;*/
//struct 结构体名 变量名
#include <iostream>
#include <string>
using namespace std;
struct student
{ string name;
int age;int score;
};
int main()
{
struct student s1;
s1.name="张三";
s1.age=18;
s1.score=100;
cout<<"姓名:"<<s1.name<<" "<<"年龄:"<<s1.age<<" " <<"分数:"<<s1.score<<endl;
return 0;
}
//struct 结构体名 变量名={成员1值,成员2值...}
#include <iostream>
#include <string>
using namespace std;
struct student
{ string name;int age;int score;};
int main()
{
struct student s2={"张三",18,100 };
cout<<"姓名:"<<s2.name<<" "<<"年龄:"<<s2.age<<" " <<"分数:"<<s2.score<<endl;
return 0;
}
//定义结构体时顺便创建变量
#include <iostream>
#include <string>
using namespace std;
struct student
{ string name;int age;int score;};
struct student s3;
int main()
{
s3.name="张三";
s3.age=18;
s3.score=100;
cout<<"姓名:"<<s3.name<<" "<<"年龄:"<<s3.age<<" " <<"分数:"<<s3.score<<endl;
return 0;
}
//结构体数组
#include <iostream>
using namespace std;
struct student {string name;int age;int score;};
int main()
{
//创建结构体数组,并给结构体数组的元素赋值
struct student s1[3]=
{
{"zhang",18,100},
{"li",19,99},
{"wang",20,98},
};
//遍历结构体数组
for(int i=0;i<3;i++)
{
cout<<"姓名:"<<s1[i].name <<"年龄: "<<s1[i].age<<"分数:"<<s1[i].score<<endl;
}
return 0;
}
//结构体指针
#include <iostream>
#include <string>
using namespace std;
struct student {string name;int age;int score;};
int main()
{
struct student s={"zhang",18,100};
//通过指针指向结构体变量
student *p=&s;
//通过指针访问结构体变量中的数据
cout<<"姓名: "<<p->name<<"年龄:"<<p->age<<"分数:"<<p->score<<endl;
return 0;
}
//结构体嵌套结构体
#include <iostream>
#include <string>
using namespace std;
struct student{string name;int age;};
struct teacher{string name;int age;struct student s;};
int main()
{
teacher t;
t.name="li";
t.age=43;
t.s.name="zhang";
t.s.age=18;
cout<<"姓名: "<<t.name<<"年龄:"<<t.age<<"学生姓名:"<<t.s.name<<"学生年龄:"<<t.s.age<<endl;
return 0;
}
//结构体数组
#include <iostream>
#include <string>
using namespace std;
//结构体数组------定义结构体数组
struct student{
string name;
int age;
int score;
};
//创建结构体数组
int main()
{
struct student stuarray[3]={
{
"zhang",18,100
},
{
"li",19,99
},
{
"wang",20,98
}
};
//结构体数组中的元素赋值
stuarray[2].name="zhao";
stuarray[2].age=21;
stuarray[2].score=97;
//遍历结构体数组
for(int i=0;i<3;i++){
cout<<"姓名: "<<stuarray[i].name
<<"年龄: "<<stuarray[i].age
<<"分数: "<<stuarray[i].score<<endl;
}
return 0;
}
//结构体指针
#include <iostream>
#include <string>
using namespace std;
struct student{
string name;
int age;
int score;
};
int main()
{
struct student s={"zhang",18,100
};
struct student*p=&s;//通过指针指向结构体变量
cout<<"姓名:"<<p->name<<" "<<"年龄:"<<p->age<<" "<<"分数:"<<p->score<<endl;
return 0;
}
//结构体嵌套结构体
#include <iostream>
#include <string>
using namespace std;
struct student{
string name;
int age;
int score;
};
struct teacher{
string name;
int id;
struct student stu;
};
int main()
{
teacher t;
t.id=10010;
t.name="ye";
t.stu.name="zou";
t.stu.age=18;
t.stu.score=100;
cout<<"老师姓名:"<<t.name<<" "<<"老师id:"<<t.id<<" "
<<"学生姓名:"<<t.stu.name<<" "<<"学生年龄:"<<t.stu.age<<" "
<<"学生分数:"<<t.stu.score <<endl;
return 0;
}
//结构体做函数参数
#include <iostream>
#include <string>
using namespace std;
struct student {
string name;
int age;
int score;
};
// 值传递
void printstudent(student s) {
cout << "子函数中姓名:" << s.name << " 年龄:" << s.age << " 分数:" << s.score << endl;
}
// 地址传递
void printstudent1(student* p) {
cout << "子函数1中姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
}
int main() {
student s;
s.name = "zhang";
s.age = 18;
s.score = 100;
// 调用值传递函数
printstudent(s);
// 调用地址传递函数
printstudent1(&s);
return 0;
}
#include <iostream>
#include <string>
using namespace std;
struct student {
string name;
int age;
int score;
};
// 值传递
void printstudent(student s) {
s.age=100;//值传递修饰形参,实参不会改变
cout << "子函数中姓名:" << s.name << " 年龄:" << s.age << " 分数:" << s.score << endl;
}
// 地址传递
void printstudent1(student* p) {
cout << "子函数1中姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
}
int main() {
student s;
s.name = "zhang";
s.age = 18;
s.score = 100;
// 调用值传递函数
printstudent(s);
cout<<"年龄:"<<s.age<<endl;
// 调用地址传递函数
printstudent1(&s);
return 0;
}
#include <iostream>
#include <string>
using namespace std;
struct student {
string name;
int age;
int score;
};
// 值传递
void printstudent(student s) {
cout << "子函数中姓名:" << s.name << " 年龄:" << s.age << " 分数:" << s.score << endl;
}
// 地址传递
void printstudent1(student* p) {
p->age=28;
cout << "子函数1中姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
}
int main() {
student s;
s.name = "zhang";
s.age = 18;
s.score = 100;
// 调用值传递函数
printstudent(s);
// 调用地址传递函数
printstudent1(&s);
cout<<"年龄:"<<s.age<<endl;
return 0;
}
//结构体const的使用
#include <iostream>
#include <string>
using namespace std;
struct student {
string name;
int age;
int score;
};
void printstudent(const student *s){//加入const之后,一旦有修改的操作就会报错,防止误操作
cout<<"姓名:"<<s->name<<" "<<"年龄:"<<s->age<<"分数:"<<s->score<<endl;
}
int main() {
struct student s={"zhang",18,100
};
printstudent(&s);
return 0;
}