A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨勇 中级黑马   /  2014-4-26 18:13  /  1286 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我知道结构体可以写成下面的形式:
//定义类型和创建结构体变量分开
//定义类型
Struct Student{
    int age;
};
//创建变量
Struct Student stu1;

另一种形式是定义类型和创建结构体变量一起进行
Struct Student{
    int age;
} stu2;

可是在使用typedef关键字的时候通常是像下面这样:
typedef Struct Student
{
     int age;
}Mystu;
意思是使用typedef关键字,为结构体类型Struct Student 起一个叫做Mystu的别名,我的问题是,这难道不是创建一个结构体类型的变量么?有没有大神能够解说下究竟是为什么?谢谢!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
typedef只是为类型起个别名而已 这里 Struct Student只是一种类型。前面没有typedef的话,是声明一个变量
回复 使用道具 举报
本帖最后由 桑托尔 于 2014-4-26 18:29 编辑

没有什么解释啊...这就是C语言中关于typedef的语法 只是它正好和创建结构体的语法在这里面的语法类似,关键看的是你这条语句出现在什么地方。
宏定义往往是在主函数的外面,而创建结构体变量,往往是在主函数或者其他函数里面,无论从用法和位置上,都不一样。
这就好比说a[10]这个东西,说的到底是a数组中的第11个元素呢,还是建立一个以a为名称,里面有10个变量的数组?关键还是看a[10]前面跟的是什么。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
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类型来看待。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马