黑马程序员技术交流社区
标题:
关于结构体中使用typedef的问题
[打印本页]
作者:
杨勇
时间:
2014-4-26 18:13
标题:
关于结构体中使用typedef的问题
我知道结构体可以写成下面的形式:
//定义类型和创建结构体变量分开
//定义类型
Struct Student{
int age;
};
//创建变量
Struct Student stu1;
另一种形式是定义类型和创建结构体变量一起进行
Struct Student{
int age;
} stu2;
可是在使用typedef关键字的时候通常是像下面这样:
typedef Struct Student
{
int age;
}Mystu;
意思是使用typedef关键字,为结构体类型Struct Student 起一个叫做Mystu的别名,我的问题是,这难道不是创建一个结构体类型的变量么?有没有大神能够解说下究竟是为什么?谢谢!
作者:
gaoxinglei123
时间:
2014-4-26 18:18
typedef只是为类型起个别名而已 这里 Struct Student只是一种类型。前面没有typedef的话,是声明一个变量
作者:
桑托尔
时间:
2014-4-26 18:27
本帖最后由 桑托尔 于 2014-4-26 18:29 编辑
没有什么解释啊...这就是C语言中关于typedef的语法 只是它正好和创建结构体的语法在这里面的语法类似,关键看的是你这条语句出现在什么地方。
宏定义往往是在主函数的外面,而创建结构体变量,往往是在主函数或者其他函数里面,无论从用法和位置上,都不一样。
这就好比说a[10]这个东西,说的到底是a数组中的第11个元素呢,还是建立一个以a为名称,里面有10个变量的数组?关键还是看a[10]前面跟的是什么。
作者:
Freedam
时间:
2014-4-26 23:52
typedef的确是起个别名。这样写主要是为了以后方便定义所考虑。
比如正常的结构体变量的定义如下:
struct Student
{
int age;
char *name;
};
struct Student stu;
这种方法定义太麻烦,如果再定义其他学生定义前还要加struct Student来定义。
struct Student
{
int age;
char *name;
} stu;
这种定义虽然简便了许多,但是如果多定义变量,还要在这里加,不能随便定义已有的结构体。
struct
{
int age;
char *name;
};
这种只能定义一次。
typedef struct Student
{
int age;
char *name;
}Mystu;
这样的方法灵活性高,可复用性好。
因为他可以使定义结构体变量的方式简化成像定义普通基本数据类型一样。Mystu stu;就能定义一个结构体。以后再想定义一个新的变量时可以直接这样写,方便以后拓展。
其实这样写你既可以理解成定义了一个新的结构体变量也可以理解成给一个结构体变量起了一个别名。因为写成这样之后如:
typedef struct Student
{
int age;
char *name;
}Mystu;
你都得把它当作一个Mystu类型来看待。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2