C++ 结构知识点摘录

结构

结构定义的一般形式为:

struct <结构名>{
    <成员列表>
};
  • struct 是关键字,表示结构定义;

  • <结构名>是一个标识符,是结构的名字;

  • <成员列表>由若干个成员的声明组成,每个成员都是该结构的一个组成部分。

例如,分数包含两个成员:分子和分母,可以定义为一个结构。分数结构名可以取名为 rationalNumber ,两个成员都是整型变量,可以分别取名为 fenzi 和 fenmu,则分数结构可以定义为:

struct rationalNumber{
    int fenzi;     // 分子
    int fenmu;     // 分母
};

结构的定义是定义一个新的数据类型(新类型名就是结构名),这样不会有内存分配。之后就可以像使用预定义类型(如 int )那样来使用结构类型。

例如:

rationalNumber x,y;

该语句声明了两个 rationalNumber 类型的变量 x 和 y,每个变量中都包含了两个成员:整型的 fenzi 和 fenmu。变量的声明会有内存分配,可以使用 x 和 y 的两个整型变量成员来存储数据,这样就可以把同一个分数的分子和分母存入 rationalNumber 类型的相应变量中,该变量就可以表示一个分数了。

结构的定义是可以嵌套使用的。例如 person 结构中包含生日成员,而生日中又包含年、月、日三个成员,代码如下:

// 定义结构date
struct date
{
    
    
    int year, month, day;
};
// 定义结构person
struct person
{
    
    
    int IDNumber;     // 身份证号
    char name[20];     // 姓名
    char sex;      // 性别
    date birthday;     // 生日,嵌套定义
};

结构的初始化及使用

结构变量的初始化和数组变量的初始化一样,采用花括号括起来的初始值列表的形式。
例如:

rationalNumber x={
    
    12,46};

该语句中,其初始化值按序赋值给各个成员,即12和46分别赋值给了 x 的 fenzi 和 fenmu 成员。
结构变量的使用有两种方式:一种是把结构变量当做一个整体使用;另一种是拆开了用,单独操作其中的某个成员:
当结构变量当做一个整体使用时,有两个运算符:赋值运算符 = 和地址运算符 & 可以直接作用于结构变量上;
例如:

rationalNumber x = {
    
    12,46}, y ;
y = x ;     // 结构变量中的每个成员分别赋值
rationalNumber *p = &x;      // 声明结构指针,并初始化为 x 的地址

当结构变量拆开使用时,需要访问结构变量的成员,并可以像使用普通变量那样来使用结构变量的成员,如分数的两个成员就可以看成普通的 int 类型变量。
其中:拆开结构的方式有两种,一种是使用结构名 + 圆点运算符(.);另一种是使用指向结构变量的指针 + 箭头运算符(->)。

例如:

rationalNumber x= {
    
    12,46}, y ;
y = x ;     // 结构变量中的每个成员分别赋值
rationalNumber *p = &x;     // 声明结构指针 p,并让 p 指向 x
x.fenzi = 18;     // 使用圆点操作符访问并修改 x 的成员 fenzi
p->fenmu = 108;     // 使用箭头操作符并修改 x 的成员 fenmu

函数不仅能通过参数传入结构变量,也可以通过返回值返回结构变量。
例如:下面的 add 函数将分数 x 的分子和分母分别加1后返回:

#include <iostream>
using namespace std;
struct rationalNumber{
    
    
    int fenzi;     // 分子
    int fenmu;     // 分母
};
rationalNumber add(rationalNumber x)
{
    
    
    x.fenzi++;     // 分子加 1
    x.fenmu++;     // 分母加 1
    return x;     // 返回结果
}
int main()
{
    
    
    rationalNumber a ={
    
    23,56}, b ;
    b=add(a);     // 调用add 函数
    cout << b.fenzi << "/" << b.fenmu << endl;     // 输出返回值
    return 0;
}
  • 输出结果为:24/57。
    温馨提示:结构变量作为一种新的数据类型,可以和预定义类型一样使用。

结构数组

结构的定义是定义一个新的数据类型,所以可以使用结构名(类型)来声明结构数组。结构数组的每一个数组元素都是一个结构变量。
使用结构数组时,首先像使用数组那样,用数组名加下标的方式访问数组元素,数组元素即结构变量,然后再访问结构变量的成员(使用圆点运算符或者箭头运算符),结构变量的成员则可以当普通变量使用。
下面的程序定义了结构 student,声明了 student 类型的数组 cs( cs 包含5个元素,分别是 cs[0] 、cs[1] 、cs[2] 、cs[3] 、cs[4] ),并同时对数组 cs 进行了初始化:

struct student {
    
    
    int num;
    char name[20];
    float score;
}cs[5]={
    
    {
    
    110, ″Zhang Ping″, 45},
        {
    
    102, ″Li Xiaoming″, 92},
        {
    
    153, ″Wang Ming″, 52.5},
        {
    
    134, ″Cheng Ling″, 87},
        {
    
    105, ″Wang Xiaofang″, 95},
};

由于 cs 是数组,所以初始化语法为花括号括起来的逗号分开的5个数据,由于 cs 数组的每个元素都是结构变量,所以对结构变量的初始化语法为花括号括起来的各个成员的值。
第一个花括号部分{110, ″Zhang Ping″, 45}初始化给 cs[0] ,其中110给了cs[0].num,“Zhang Ping”给了cs[0].name(其实cs[0].name也是一个数组,也是逐个数组元素初始化,‘Z’给了cs[0].name[0],…… ),45则给了cs[0].score。

访问结构数组成员

要使用结构数组,也需要拆开了使用,数组使用循环遍历,用 [ ] 加下标访问其数组元素,结构变量则使用圆点运算符拆开即可。
如下面的程序输出了数组 cs 的所有信息:

for(int i = 0; i < 4; i++)
{
    
    
    cout<<cs[i].num<<", "<<cs[i].name<<": "<<cs[i].score<<endl;
}

猜你喜欢

转载自blog.csdn.net/interestingddd/article/details/114409097
今日推荐