C语言中的结构数组(C Primer Plus 第六版)

223 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

这节会学到->运算符和struct结构 学完这些,再去学数据结构就很简单了! 加油!

资源在这

Screenshot_20211001_171431_com.tencent.mm.jpg

一、结构数组

实例

#include <stdio.h>

int main(void)
{

    struct book
    {
        char title[MAXTITL];
        char author[MAXAUTL];
        float value;
    };
    

    return 0;
}

学完这个就能学到->运算符了,学完它再去学数据结构就够了!真的令人兴奋啊!

1.1 声明结构数组

​ 声明结构数组和声明其他类型的数组类似。下面是一个声明结构数组的例子:

​ struct book library [MAXBKS] ;

以上代码把library声明为一个内含MAXBKS 个元素的数组。数组的每个元素都是一个book类型的数组。因此,library [0]是第1个book类型的结构变量,library[1]是第2个book类型的结构变量,以此类推。参看图14.2可以帮助读者理解。数组名library本身不是结构名,它是一个数组名,该数组中的每个元素都是struct book类型的结构变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DwAhlymI-1634262932341)(E:\Typora\Image\image-20211014182903568.png)]

1.2 标识结构数组的成员

​ 为了标识结构数组中的成员,可以采用访问单独结构的规则:在结构名后面加一个点运算符,再在点运算符后面写上成员名。如下所示: ​ library [ 0 ].value //第1个数组元素与value相关联

​ library [ 4 ].title //第5个数组元素与title 相关联

​ 注意,数组下标紧跟在library后面,不是成员名后面:

​ library.value [ 2] //错误 ​ library [2] .valuel //正确 ​ 使用library[2] .value的原因是: library[2]是结构变量名,正如library[1]是另一个变量名。顺带一提,下面的表达式代表什么? ​ library [2 ].title [ 4 ] ​ 这是library数组第3个结构变量(library[2]部分)中书名的第5个字符(title[ 4]部分)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Swj1oaVi-1634262932343)(E:\Typora\Image\image-20211014183405537.png)]

书上写的太详细了!

1.3 结构数组的嵌套

struct names                    //定义结构体names
{
    char first[LEN];
    char last[LEN];
};

struct guy                      //定义结构体guy
{
    struct names handle;
    char favfood[LEN];
    char job[LEN];
    float income; 
};

//初始化数组
int main(void)
{
    struct guy fellow[2] = {    
        //这是一个结构嵌套,guy结构里嵌套了names结构
        //初始化结构数组fellow,每个元素都是一个结构变量
        {{"Ewen","Villard"},
        "girlled salmon",
        "personality coach",
        68112.00
        },
        {{"Rodney","Swillbelly"},
        "tripe",
        "tabloid editor",
        432400.00
        }
	};
}

应该很容易理解,在结构体gay里放了一个 names 结构体,然后就是赋值了