C语言结构体(入门)

目录

初识结构体

我们为什么要使用结构体

结构体的声明

注意事项

创建结构体变量

匿名结构体

结构体自引用

typedef重命名

结构体初始化

注意事项

打印结构体

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

 


初识结构体

我们为什么要使用结构体

之前我们学习了很多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)。

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Perfectkn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值