结构体
1、 用户可以自定义的数据类型:结构体类型(struct)、类类型(class)、枚举类型(enumeration)、共用体类型(union)。
2、 为什么使用结构体:有时需要将不同类型的数据组合成一个有机的整体,方便用户使用
3、 声明结构体类型的一般形式:
struct 结构体类型名
{
成员表;
};
结构体类型名用来做结构体类型的标志,和int,double,char等是一样的;
在声明结构体是必须对各成员都进行类型的声明,每一个成员也成为结构体中的一个域(field),成员表又叫做域表,声明结构体类型的位置一般在文件的开头,在所有函数之前,也可以在函数中声明结构体:
类型名 成员名;
4、 结构体变量的定义方法:
(1) 先声明结构体类型再定义变量
结构体类型名 结构体变量名;
例如:Student student1,student2;
(2) 在声明的同时定义变量
struct 结构体名
{
成员表;
}变量名;
例如:
struct Student
{
int num;
char name[20];
char sex;
int age;
}student1,student2;
(3) 直接定义结构体类型变量
struct //此处没有结构体类型名
{
成员表;
}变量名表;
5、 结构体应用实例一:定义结构体、结构体变量并赋值,定义结构体变量数组并赋值
#include<iostream>
#include<QDebug>
using namespace std;
struct Data//定义结构体,只是定义,并没有分配内存
{
int m_year;
int m_month;
int m_day;
};
struct Student//定义结构体并且定义结构体变量student1,student2,student2赋值
{
int m_num;
char m_name[20];
char m_sex[2];
int m_age;
float m_score;
char m_addr[40];
Data da1;
}student2,student1={10002,"wangminghe","f",24,99.9,"chinashan",1994,12,10};
int main()
{
Student student2={102,"wanhe","m",24,99,"china,dong",1994,12,10};
Student student3=student1;//直接将student1赋值给student2
student3.m_num=13200;//.是成员运算符,在所有的运算符中优先级最高
Student stu[3]={{102,"wanhe","m",24,99,"china,dong",1994,12,10},
{102,"wanhe","m",24,99,"china,dong",1994,12,10},
{102,"wanhe","m",24,99,"china,dong",1994,12,10}};//定义结构体数组并进行初始化
qDebug()<<stu[0].m_name;
qDebug()<<"student2的地址为:"<<long(&student2);
qDebug()<<student3.m_num;
}
6、 指向结构体变量的指针
#include<iostream>
#include<QDebug>
#include<QString>
using namespace std;
struct student
{
char m_name1[20];
int m_age;
int m_socre;
};
int main()
{
student stu={"zhangsan",24,100};//定义了一个stu结构体变量
student *p=&stu;//定义了一个p指针,该指针p指向结构体变量stu的首地址
qDebug()<<"stu的首地址为:"<<&stu;
qDebug()<<"p为:"<<p;
qDebug()<<stu.m_name1<<' '<<stu.m_age<<' '<<stu.m_socre;//结构体变量.成员名
qDebug()<<(*p).m_name1<<' '<<(*p).m_age<<' '<<(*p).m_socre;//(*p).成员名
qDebug()<<p->m_name1<<' '<<p->m_age<<' '<<p->m_socre;//p->成员名,“->”称为指向运算符
//这几个量是等价的
qDebug()<<"年龄为:"<<p->m_age<<"年龄的地址为:"<<&stu.m_age<<"p的地址为:"<<p;
//p->m_age得到p指向的结构体变量成员m_age的值
qDebug()<<"年龄为:"<<p->m_age++<<"年龄的地址为:"<<&stu.m_age<<"p的地址为:"<<p;
//p->m_age++得到的是P指向的结构体变量成员m_age的值,之后再使m_age加一
qDebug()<<"年龄为:"<<stu.m_age<<"年龄的地址为:"<<&stu.m_age;
qDebug()<<"年龄为:"<<++p->m_age<<"年龄的地址为:"<<&stu.m_age<<"p的地址为:"<<p;
//++p->m_age得到的是p指向结构体变量成员m_age加一之后的值
qDebug()<<"年龄为:"<<stu.m_age<<"年龄的地址为:"<<&stu.m_age;
return 0;
}