C++学习之 结构体与联合体
1.结构体
1.1 问题的提出
1.2 结构体类型及定义
1.3 结构体变量的定义
1.4 结构体变量的初始化
1.5 结构体变量的使用
//结构体变量使用.cpp
// 定义结构体类型employee,包括工号、姓名、工资3个成员,
// 定义两个该类型的变量,并对其中一个员工信息进行初始化,输入另一个员工的信息,
// 最后输出这两个员工的信息。
#include<iostream>
using namespace std;
struct employee
{
char num[10]; //员工号
char name[10]; //姓名
double salary;
};
struct employee emp1 = { "1001","李明",10000 }, emp2;
int main()
{
cout << "请输入员工的员工号、姓名和工资: ";
cin >> emp2.num >> emp2.name >> emp2.salary;
cout << emp1.num << '\t' << emp1.name << '\t' << emp1.salary << endl;
cout << emp2.num << '\t' << emp2.name << '\t' << emp2.salary << endl;
return 0;
}
1.6 结构体变量赋值运算
// 结构体变量赋值和输出.cpp : 用结构体表示学生的基本信息。
#include <iostream>
#include <string>
using namespace std;
struct Student { //学生信息结构体
char sex; //性别
int num; //学号
string name; //姓名,字符串对象
int age; //年龄
};
int main() {
Student stu = { 'F',20208001,"李明",20 };
cout << "string空间 =" << sizeof(string) << endl;
cout << "stu空间 = " << sizeof(stu) << endl << endl;
cout << "姓名 :\t" << stu.name << endl;
cout << "性别 :\t" << stu.sex << endl;
cout << "年龄 :\t" << stu.age << endl;
cout << "学号 :\t" << stu.num << endl;
return 0;
}
1.7 结构体数组
//结构体数组.cpp
// 输出employee中所有员工的数据,并找出工资最高的员工记录。
#include<iostream>
using namespace std;
#define N 4
struct employee
{
char num[10];
char name[10];
double salary;
};
struct employee emp[N] = { {"1001","李明",2800},
{"1002","张红",5000},
{"1003","王强",3600},
{"1004","刘刚",4500} };
void show()
{
cout << "显示具有employee结构的" << N << "个记录:" << endl;
for (int i = 0; i < N; i++)
cout << emp[i].num << "\t" << emp[i].name << "\t" << emp[i].salary << endl;
cout << endl;
}
void find()
{
int k = 0;
float x = emp[0].salary;
for (int i = 1; i < N; i++)
{
if (emp[i].salary > x)
{
x = emp[i].salary; k = i;
}
}
cout << "显示结构体数组中具有最大工资值的记录:" << endl;
cout << emp[k].num << "\t" << emp[k].name << "\t" << emp[k].salary << endl;
}
int main()
{
show();
find();
return 0;
}
1.8 结构体及指针
// 结构体指针.cpp
#include <iostream>
#include <string>
using namespace std;
struct Student { //学生信息结构体
int num; //学号
string name; //姓名,字符串对象
char sex; //性别
int age; //年龄
};
int main() {
Student stu[2] = { 97001, "Lin Lin", 'F', 19,
97002, "zhang san",'M',20 };
for (int i = 0; i < 2; i++)
{
cout << "Num: " << stu[i].num << endl;
cout << "Name: " << stu[i].name << endl;
cout << "Sex: " << stu[i].sex << endl;
cout << "Age: " << stu[i].age << endl;
cout << endl;
}
Student* p1, * p2;
p1 = stu;
cout << (*p1).name << ":" << (*p1).age << endl << endl;
p2 = &stu[1];
cout << p2->name << ":" << p2->age << endl;
return 0;
}
2.联合体
// 联合体应用
// 联合体变量
#include<iostream>
using namespace std;
union data
{
char c_data;
short s_data;
long l_data;
}x;
int main()
{
x.c_data = 'm'; cout << "c_data=" << x.c_data << endl;
x.s_data = 10; cout << "s_data=" << x.s_data << endl;
x.l_data = 100; cout << "l_data=" << x.l_data << endl;
return 0;
}
//联合体数据地址
#include<iostream>
#include<cstring>
using namespace std;
union U1
{
int n;
char s[10];
double d;
};
union U2
{
int n;
char s[5];
double d;
};
int main()
{
U1 u1;
U2 u2;
cout << sizeof(u1) << '\t' << sizeof(u2) << endl;
cout << "u1各数据地址:\n" << &u1 << '\t' << &u1.d << '\t' << &u1.s << '\t' << &u1.n << endl;
cout << "u2各数据地址:\n" << &u2 << '\t' << &u2.d << '\t' << &u2.s << '\t' << &u2.n << endl;
cout << endl;
u1.d = 12.3;
strcpy_s(u1.s, "abcd");
u1.n = 10;
// 上面三语句,只有最后一句有意义 ,其余都被覆盖了。
cout << u1.n << " , " << u1.s << " , " << u1.d << endl;
}
3.实战