求解答c语言结构体定义中typedef的作用

看大部分C代码中,定义结构体总是要使用typedef关键字,求高手给解答下这个关键字的用途,比如有代码如下:
typedef struct tagMyStruct
{
int iNum;
long lLength;
} MyStruct;
上面的代码写成如下不是更简单吗:
struct MyStruct
{
int iNum;
long lLength;
};

c语言结构体定义中typedef的作用是为一种数据结构体定义一个新名字。

在c语言中使用typedef帮助定义结构体,对于声明结构体变量,便可以直接使用typedef xxx(结构体名 对象名)的形式,而没必要带上struct关键词。实际项目C代码中,结构体的定义一般都使用了typedef,在大量使用结构体变量的场合,这样会省事很多。

扩展资料:

在编程中typedef能够给一个还未完全声明的类型起新名字。C语言编译器支持这种做法。typedef和#define不同,它不是简单的文本替换。如果定义中包含表达式,必须使用括号。

typedef符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。与auto、extern、mutable、static、register等关键字不能出现在同一个结构体定义中。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-25
写成下面的是简单,但是定义一个结构体变量的时候呢就麻烦了。
要写成struct MyStruct ms;这样定义。
而上面的有typedef的则不要,直接写MyStruct ms;这样

即typedef struct tagMyStruct MyStruct;后,原先定义结构体变量需要
struct tagMyStruct ms;
现在只要写成MyStruct ms了。追问

还是不太明白,比如这样,我要使用的结构体变量名称就是MyStruct,然后如果我不用typedef关键字的话,我不能直接用下面的代码来定义吗?
struct MyStruct
{
int iNum;
long lLength;
};
必须要如下这样才可以使用MyStruct变量?
struct tagMyStruct
{
int iNum;
long lLength;
};
struct tagMyStruct MyStruct;
下面分明多了一行,更麻烦了吗

追答

不要一会MyStruct一会tagMyStruct的,要明白问题的所在。
就是下面的意思:
如果定义为:
struct MyStruct
{
int iNum;
long lLength;
};
那么必须struct MyStruct ss;这样定义变量
如果定义为:
typedef struct MyStruct
{
int iNum;
long lLength;
} MyStruct;
那么就可以MyStruct ss这样定义了。

追问

按你的解答,变量是ss,那样MyStruct直接不用了,直接用ss了,最节省的写法,如下:
struct ss
{
int iNum;
long lLength;
};
这样不更简单的搞定了吗?干嘛还要写一行?

追答

这位同学,您对结构体和结构体变量还没有搞清楚。
struct ss
{
int iNum;
long lLength;
};
那么ss就是一个结构体了,而struct ss s后,s才是结构体ss类型的变量。

追问

哦,原来如此……
另外还有一个疑问,如此的话是不是结构体声明必须在文件开始处(函数外),结构体变量声明可以在任何地方?

追答

结构体定义必须在第一次使用结构体定义变量之前定义,倒不是一定要放在最前面,但一般放在最前面。结构体变量放在使用使用的地方即可。
同学,声明和定义您又没有搞清楚。
extern struct ss s;这是声明结构体变量
struct ss s;这是定义结构体变量

本回答被提问者和网友采纳
第2个回答  2013-01-24
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。

typedef struct tagMyStruct
{
int iNum;
long lLength;
} MyStruct;
这种定义之后,之后定义struct tagMyStruct结构体变量时,可以直接使用MyStruct代替struct tagMyStruct,例如MyStruct a。
注意如果没有使用typedef,下面这种模式:
struct MyStruct
{
int iNum;
long lLength;
};
那么定义结构体变量必须 struct MyStruct a这种方式定义。

所以typedef有简化变量声明的作用,还有就是在跨平台方面有很大作用,定义机器无关类型。
c++标准库使用的 typedef 来创建平台无关类型例如size_t,ptrdiff 和 fpos_t 。
第3个回答  2013-01-24
C里面在定义结构体类型的变量时要有struct关键字,如果按照你下面的写法就必须写成:
struct MyStruct a;
但是使用typedef则是为结构体类型给了一个新名字,按原先上面的写法就直接写成:
MyStruct a;
第4个回答  2013-01-24
加上typedef意为标签式定义,在结构体定义之后,在定义类型时直接可以用结构体的名字去定义对象。而不加上typedef的话为类型名定义,也就要求之后再定义对象时需要加上 struct MyStruct 才可以进行对象定义。

求解答c语言结构体定义中typedef的作用
c语言结构体定义中typedef的作用是为一种数据结构体定义一个新名字。在c语言中使用typedef帮助定义结构体,对于声明结构体变量,便可以直接使用typedef xxx(结构体名 对象名)的形式,而没必要带上struct关键词。实际项目C代码中,结构体的定义一般都使用了typedef,在大量使用结构体变量的场合,这样会省事很...

求解答c语言结构体定义中typedef的作用
加上typedef意为标签式定义,在结构体定义之后,在定义类型时直接可以用结构体的名字去定义对象。而不加上typedef的话为类型名定义,也就要求之后再定义对象时需要加上 struct MyStruct 才可以进行对象定义。

C语言typedef的作用是什么?
c语言结构体定义中typedef的作用是为一种数据结构体定义一个新名字。在c语言中使用typedef帮助定义结构体,对于声明结构体变量,便可以直接使用typedef xxx(结构体名 对象名)的形式,而没必要带上struct关键词。实际项目C代码中,结构体的定义一般都使用了typedef,在大量使用结构体变量的场合,这样会省事很...

typedef结构体指针
typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练(所以说typedef语句并不是必须使用的)。在C语言里面,struct是用来定义新的数据类型——结构体,typedef是给数据类型取别名。这两个关键词同时使用有助于减少代码量和增加代码的可读性,很多时候为了...

c语言中typedef是什么函数?有什么作用?请举个简单例子说明
它有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法 。使用typedef可编写出更加美观和可读的代码。所谓美观,意指typedef能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性以及未来的可维护性。使用typedef为现有类型创建同义字,定义易于记忆的类型名 typedef使用最多的地方是创建易于记忆...

typedef定义结构体问题
typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练。typedef的用法 在C\/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,

在c语言中typedef是什么意思?干什么用的?
在C语言中,typedef是一个关键字,主要用于创建类型别名。一、基本含义 typedef在C语言中用于为已有的数据类型定义一个新的名字,这样可以在代码中使用这个新的名字来声明变量,使得代码更易于理解和维护。例如,可以定义一个新的整数类型名称,如`MyInt`,来代替内置的`int`类型。二、使用场景 1. 简化...

typedef是什么意思?
Typedef是C语言中用来给数据类型定义别名的关键词,它的作用是将一种数据类型定义成另一种新的数据类型,使得程序中的变量可以使用新的名字进行声明和使用,从而使程序的可读性和可维护性更好。Typedef定义时需要指定原类型和新类型名称,例如:typedef int myint,将int类型定义为myint类型。通过类型别名,...

typedef语言用法
typedef是C语言中的一个重要关键字,用于为已知的数据类型或自定义的结构类型定义新的名字。这样做的目的是提升代码的可读性和简化复杂的类型声明。在结构体中使用typedef可能会遇到问题。例如,尝试在结构体中包含指向自身类型的指针时,如果没有正确处理,编译器会报错。这是因为typedef的新类型在结构体...

typedef的用法结构体
C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,来替代系统默认的基本类型名称(char\/int\/float)、数组类型名称、指针类型名称,以及用户自定义的结构型名称(struct)、共用型名称(union)、枚举型名称(enum)等。C语言的数据类型介绍 一旦用户在程序中定义了自己的数据类型名称,就可以...

相似回答