写点什么

C 语言结构体(入门)

作者:孤衫
  • 2022 年 8 月 02 日
  • 本文字数:1326 字

    阅读完需:约 4 分钟

C语言结构体(入门)

初识结构体

我们为什么要使用结构体

之前我们学习了很多 C 语言内置数据类型(int,float,double 等),但这些远远不够,比如我们要描述一个人的时候,我们需要说他的年龄,性别,身高,体重等,这些复杂的数据类型不足以用 C 语言内置的数据类型所描述。所以我们引用了自定义数据类型——结构体。(还有后面会说到的枚举,联合体)

结构体的声明

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

下面我们看一段代码


注意事项

(1)struct 是结构体的关键字,不可省略。

(2)Stu 是结构体的标签,自己在写结构体时可自行更改。

(3){ }里面的就是成员变量,以上面代码为例,我定义了几个字符数组,和一个整型变量 age。

(4){ }之后的 分号 ; 一定不可省略!

(5)我们现在定义的只是一个结构体类型,它和 int , float 的意义是差不多,只是一个类型而已。

创建结构体变量

以上面的代码为例

struct Stu s1;

我们就定义了一个类型为 struct Stu 变量名为 s1 的一个结构体变量。

放在 main()函数里就是局部变量,放在 main()函数外就是全局变量。

在声明结构体后,分号的前面定义变量也是可以的,这也是全局变量。


匿名结构体

还是以上面代码为例,匿名结构体就是没有 Stu 这个结构体标签,它在定义结构体变量的时候只能在 { }和;之间定义。 不建议使用,除非以后自己使用完一个结构体就扔了不要了可以使用。

结构体自引用

看一段代码


这两个结构声明里成员列表都包含了自身,不同的是左边是定义了一个结构体普通变量,右边是结构体指针变量。 这里我要说的是,结构体自引用只有右边是对的,大家当做了解即可,因为这和数据结构中的链表扯上了关系。 简单说一点左边的无法计算字节数,右边的可以,因为指针的大小本来就是固定的 4/8 字节。

typedef 重命名

看一段代码


根据以上的代码 typedef 的意义就是将结构体类型 struct Stu 变成了 Stu ,用了 typedef 之后,定义一个结构体变量时可以省略 struct。

结构体初始化

Talk is cheap , show me your code.


注意事项

如上面代码所见,我定义了一个 Stu 结构体类型,结构体的成员变量包括:字符类型的 c,单精度浮点型的 b,整型的 age,字符数组长度为 12 的 tele。

在 main()函数内部定义了一个结构体变量,名为 s1

(1)在 main()函数里初始化结构体时要用{ },里面的数据顺序要和成员变量的顺序一 一对应,比如成员变量第一个是字符类型的 c,那么我赋初值时就要先给 c 赋初值,值是多少无所谓,只要满足 char 的语法要求。

(2)赋初值之间用逗号隔开。

(3)别忘记最后的分号。

打印结构体

还是上面的代码,看打印函数 printf()那一行,你要打印出结构体,意思就是要打印出它所有的成员变量。

打印第一个成员变量 c 时,看它什么类型?char 字符型。 根据 C 语言语法要求用 %c 打印。

那怎么找到这个成员变量呢?上面的代码中我们定义了一个结构体变量 s1,并给它赋初值,意思就是所有的成员变量都在 s1 里了, 输入 s1.c 编译器就会找到成员变量 char c。同理其他成员变量也一样。

不想初始化直接打个 0.

结构体包含另一结构体的初始化


很明显上面的代码中,Stu 结构体类型里包含了 T 这个结构体类型,那么赋初值时,也要按照顺序,并加一个 { },打印 T 里面的成员变量时,先在 Stu 里找到 T 结构体类型定义的变量 st,再找要打印的成员变量(我找的是 weight)。

发布于: 刚刚阅读数: 3
用户头像

孤衫

关注

还未添加个人签名 2022.08.02 加入

还未添加个人简介

评论

发布
暂无评论
C语言结构体(入门)_编程语言_孤衫_InfoQ写作社区