c++中的构造数据类型----结构体
构造数据类型:
无论是基本数据类型还是数组类型都仅仅描述了事物某一方面的特性, 但是, 一种事物往往具有多方面的属性, 如一个同学有学号, 姓名, 性别, 年龄等属性。c++中的构造数据类型简单点理解就是将一个或者几个数据类型组合起来的。
(在回顾一下比如int、float、double等,叫做基础类型,或内置类型,而由这些类型做成的、含有多个的组合类型,称作构造类型,)
C++中,构造类型有一下几种:
数组类型、结构体类型、共用体类型、枚举类型、用户自定义数据类型(类)
这篇文章主要记录c++结构体的相关知识点
1、结构体之引用结构体成员变量
2、结构体数组、结构体指针
3、结构体的嵌套
4、结构体之结构体作为函数参数
一、结构体
1、简单介绍
结构体是一个可以包含不同数据类型的结构、是一种可以自己定义的数据类型
有下面特点:
1、可以在一个结构中申明不同的数据类型
2、相同结构的结构体变量是可以相互赋值的
(比较下结构体和数组类型:
数组是单一数据类型的 数据集合,它本身不是数据类型但是结构体是。数组名称是常量指针,所以不可以作为左值进行运算,即数组之间不可以通过数组名称相互赋值,尽管数组数据类型和数组大小完全相同
)
2、结构体的定义
与一般的基本数据类型定义一样,结构体也需要一个关键字struct关键字,定义语法如下:
struct 结构体名
{
结构体成员变量列表
//注释:结构体成员变量用于描述这个结构体的一些特性,它可以为基本数据类型(int)、数组、指针类型、结构体。此成员变量不可以重名
};
例子1:struct student {
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
}
例子2:成员变量是结构体数据类型的情况
例子2:
struct Point {
//成员列表
double x; // x点坐标
double y; //y点坐标
}
坐标轴上直线的信息
struct Line{
struct Point StartPoint;
struct Point EndPoint;
}
3、通过结构体创建变量
通过结构体创建变量的方式有三种:
1、先定义结构体类型,在单独定义变量类型
struct 结构体名 变量名
struct student { //定义时候struct 关键字不可以省略
//成员列表
string name; //姓名
int age; //年龄
int score; //分数 }
int main() {
struct student stu; //struct 关键字可以省略
stu.name = "小明"; //结构体变量利用操作符 ''.'' 访问成员
stu.age = 6;
stu.score = 100;
//说明:struct student是结构体类型,stu结构体变量。此处的struct student相当于用int定义变量的时候,和int类型名是一样的。
2、直接在结构体变量名之后定义
struct 结构体名 变量名 = { 成员1值 , 成员2值…}
struct student {
//成员列表
string name; //姓名
int age; //年龄
int score; //分数 }
int main() {
struct student stu = { "小明",6,100 };
}
3、 定义结构体时顺便创建变量
struct student {
//成员列表
string name; //姓名
int age; //年龄 i
nt score; }stu; //结构体变量创建方式3
int main() {
stu.name = "小明";
stu.age = 6;
stu.score = 100;
}
4、使用typedef函数说明一个结构体类型名后再用新类型名来定义变量
为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等),(注意与#define的区别,typedef 是用来定义一种类型的新别名的,它不同于宏#define,宏是简单的字符串替换)
例:
1 typedef int INTEGER;
为int定义了一个新的名字INTEGER,也就是说INTEGER与int是同义词
也可以为结构体定义一个别名
typedef struct student STUDENT;
或者
typedef struct student
{
int num;
}STUDENT;
上述两条语句是等价的,二者都是为struct student结构体类型定义了一个新的名字STUDENT,即STUDENT与struct student是同义词
STUDENT stu1,stu2;
struct student stu1, stu2;