C

C 知识量:16 - 74 - 317

14.1 结构变量><

结构的声明- 14.1.1 -

C语言的结构变量扩展了程序员表示数据的能力,结构不属于基本数据类型,先来看一个结构的声明:

struct teacher {
    char name[20];
    char sex[10];
    int age;
};

以上代码声明了一个名为teacher的结构,它由两个字符数组和一个int类型变量组成。从语法上来看:

  • struct是声明结构的关键字,表明其后是一个结构。

  • teacher是该结构的名称,也可以不使用名称,但是如果想要在后续代码中再次引用该结构,就应当设置名称。

  • 用一对花括号括起来的是结构的成员类别。每个成员由自己的声明来描述具体类型。通常,成员由基本类型构成,但也可以是其他结构。

  • 最后的分号是必须的,不能省略。

定义结构变量- 14.1.2 -

声明结构只是告诉编译器如何表示数据,但并未真正分配内存空间。要想真正创建一个结构变量需要使用以下形式:

struct teacher zhang;

以上代码创建了一个名为zhang的teacher结构。其中,struct teacher起到的作用与int或double等关键字相同。以上代码属于简化的声明,完整的声明如下:

struct teacher {
    char name[20];
    char sex[10];
    int age;
} zhang;

也可以省略结构名称:

struct {
    char name[20];
    char sex[10];
    int age;
} zhang;

如上节所提到的,如果想要在后续代码中再次引用该结构,就不要在声明结构时省略结构名称,同时,应当尽量使用简化的声明格式。

初始化结构- 14.1.3 -

对于结构teacher:

struct teacher {
    char name[20];
    char sex[10];
    int age;
};

其初始化的代码示例如下:

struct teacher zhang = {
    "ZhangShu",
    "male",
    45
};

注意:每一个结构成员之间使用逗号分隔。

访问结构成员- 14.1.4 -

结构类似于数组,要访问结构的成员,可以使用点(.)运算符。访问结构变量zhang中的各个成员的示例代码如下:

zhang.name;
zhang.sex;
zhang.age;

结构的初始化器- 14.1.5 -

结构的初始化器提供了另一种初始化结构的方式,它使用点运算符和成员名来标示特定的元素。例如:只初始化结构变量zhang的年龄:

struct teacher zhang = {
    .age = 50
};

也可以按照任意顺序初始化各成员:

 struct teacher zhang = {
    .age = 45,
    .name = "ZhangShu",
    .sex = "male",
    50
};

其中,age的值最终会被初始化为50,因为规定最后一次赋值才是实际有效的,(按照结构声明时的顺序)50紧跟在sex成员之后,覆盖了之前的45。