您好,欢迎来到微智科技网。
搜索
您的当前位置:首页C语言结构体数组遇上typedef

C语言结构体数组遇上typedef

来源:微智科技网
C语⾔结构体数组遇上typedef

昨天韩同学在做数据结构题的时候,问了我⼀个关于typedef 与结构体数组的问题:

1 typedef struct vexnode2 {

3   int vertex;

4   arcnode* firstarc;5 }adjlist[Vnum];

这⾥我们先回顾⼀下struct是怎么使⽤的。1.有名构造类型-结构体

1 struct student //<-------结构名2 {

3   char name[30]; //<-------结构成员4   char sex;5   int age;6   float high;

7 }stu;      //<--------定义数据类型同时定义stu结构体变量(不要忘记;号,在C语⾔中,凡是构造类型都要加分号,⽐如union)

8 struct student stu2; //<-------这时候我们还可以⽤struct student结构体类型定义另⼀个 stu2结构体成员变量(此处的struct不可省,在C++中才可以省略)

2.别名构造类型-结构体

上⾯我们使⽤有名构造类型-结构体可以满⾜要求了,为何还要有个别名构造类型呢?

因为你看上⾯的第8⾏代码,我们定义⼀个新的结构体类型变量时,每次都要写上长长的前缀struct student 不太⽅便简洁,⽽且在⼤型项⽬中,变量往往都占⽤了很长的位置,更显累赘,于是typedef 登场了。我们先看个例⼦:

1 typedef struct student2 {

3   char name[30];4   char sex;5   int age;6   float high;7 }STUDENT;

8 STUDENT stu, stu2;

对⽐上⾯两例的代码,我们发现是不是只有两点差异:1.struct 前添加了typedef ;

2.结构体的右下⾓右括号}后的结构体变量stu替换成了STUDENT;

于是,我们就可以⽤student结构体类型的别名STUDENT去定义结构体变量啦!就有了第8 ⾏代码,与我们的基本数据类型例如 int a ,是不是⼀致啦!

别忙,我们先理清下思路到底是怎么给结构体类型取别名的?我想通过我上⾯的分析可以归纳出以下两个步骤:1.先按照有名构造类型-结构体 的⽅式定义结构体类型,同时定义⼀个结构体变量;

2.在定义好的结构体类型struct 前添加typedef,然后把定义的结构体变量替换成你取定的别名。

回到最初的问题,韩同学问我的typedef {...}adjlist[Vnum]; 这⾥我们就可以这样理解啦!

先struct {....}adjlist[Vnum] 了⼀个结构体类型并且同时声明了⼀个adjlist[Vnum] 结构体变量,这个变量有点特殊,它是个数组,合起来就是结构体数组,既然名叫结构体数组,那么这个数组中的每个元素的类型不就是 我们定义的结构体类型吗?

再按照我们上⾯取别名的步骤,先typedef,然后把结构体变量换成你要取得别名,这⾥⽐较特殊的是,我们取得结构体别名就是结构体数组,谨记,那么adjlist 代表的就不仅仅代表⼀个结构体类型了,它被赋予了外加的⼀个特性:数组;也就是说如果我们这样写

1 adjlist a;

那么上⾯的代码中 a 就是⼀个结构体数组了,a中的每个元素都是我们定义的结构体类型。看到这你就差不多会⽤了,但是不是感觉还是有点未懂?

哎,其实我给你看下⾯的代码:

1 typedef struct vexnode2 {

3   int vertex;

4   arcnode* firstarc;5 }[Vnum] adjlist;

你看,我把[Vnum]放在了前⾯ 与前⾯的struct ⼀个整体 你是不是就明⽩了,其实原理也是这样的,只是C编译器不认识这种语法,我们把它放在后⾯了⽽已,但这种其实才符合⼈的思维。⼩结:

  1、我们定义的新类型,它的地位等同于int 类型。还只是个模⼦,如果没有⽣成  2、变量的话,是不会占⽤空间的。

  3、结构定义放置在程序的开始部分,位于头⽂件声明之后。  4、注意{}不表⽰复合语句,其后有分号。

  5、结构体类型名称是struct+结构体名,注意struct 关键字不能省略。

  6、结构体数组的typedef 中我们可以把[] 前置 来帮助我们理解,但实际应⽤还是正常使⽤。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务