严格说,它不是一种新类型,使用typedef一般用来达到以下几个目的:
typedef用法_typedef用法错误的一个
typedef用法_typedef用法错误的一个
typedef用法_typedef用法错误的一个
typedef用法_typedef用法错误的一个
1,用来定义一种类型的别名,这样,可以用它来连续定义变量,例如:而不是简单的宏替换,比如:
char
PCHAR;
pa,
2,在C时代,定义了一个结构体之后,再使用的时候还要加上struct关键字才能用来定义变量,这样会比较麻烦,而使用typedef来定义之后,就可以不用写struct关键字了,比如:
struct
tagP当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗OINT
{int
x;
int
y;
POI要写成struct MyStruct ms;这样定义。NT
p1;
当然,,C++里可以不用这样,因为C++使用结构体的时候不需要加struct关键字
3,用typedef来定义与平台无关的类型。
比如你有一个跨平台的项目,需要统一使用一种双精度浮点型的类型,而在一些平台上可能没有这种实现,或者实现不同,这时候你就可以根据不同的平台来定义你自己的类型
4,用来使复杂的定义简单化,最常用的就是给函数指针定义一个别名
所以,总的来说,typedef并不是“发明”了另外一种新类型,而相当于是一种类型的别名,为了方便使用。
在定义结构体array的时候有这样一段:
typedef有时也可用 宏定义 来代替 typedef 功能,但是 宏定义 是由} array; 预处理 完成的,而 typedef 则是 在编译时 完成的,后者更为灵活方便。 struct
在程序中使用结构变量时,往往不把她作为一个整体来使用。{ElemType data[maxsize];
使用:typedef int ElemType;//定义ElemType为int类型你想让它是什么类型自己用typedef重定义就行。也可以用模板表示,类似template
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便,具体区别在于:
若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;区别就在于使用时,是否可以省去struct这个关键字。
typedef int(Postruct MyStructintNameToFunc)(void);
C++可以这么做:p=new p请多在网路上搜寻, 已经有很多参考资料.
typedef int (funptr)(void);
typedef int (FUN_TYPE) (void);
tyoedef int Pint;
enum weeakday a,b,c;表示的意思并不是定义一个指向int型指针,而是表示定义一种新的数据类型,这种类型是指向int型的指针,那么如果下面有Pint a;则这时的a是指向int型指针
typedef struct
{...
表示定义一种数据类型,该类型是指向结构体的
所以下面如果有Pstr p;则p是一个指向结构体的指针
但是很显然p是悬垂指针,而题中这种情况是不能静态分配数据的
所以可以动态的分配一个空间来让p有所指向
C没有new语句,那么可以这么做:p=(Pstr)malloc(sizeof(p));
全手打的,希望对你有帮助
int p ; 指向一个整型的指针。
如果,在前面我们使用了 typedef int Pint;
则上面的声明方法,可以改为: Pint p;同样是声明一个指向整型的指针。
上面的结构体是一样的。也同样理解。
首先要理解typedef 和#define的区别:
!.首先typdef 和#define都可以定义一个新的东西
2.但是typdef 具有完整信
而#define 只是程序在预编译是的替换
其次要理解这个问题关键 要理解typedef 的结构
typedef struct node{ ....}node Pstr;
这里有两个标签node但是是两个不同的东西。只有第二个node 是代表一个结构。(这里省略了)
typedef struct
{...
}是定义了一个数据结构,,Pstr是定义了这个类型结举一个相似的例子,一般指向整型的指针都是如下使用的:构的一个指针变量
这样写就可以用Pstr去定义和声明 该结构的指针类型
1、为基本数据类型定义新的类型名。
int length;2、为自定义数据类型结构体、共用体和枚举类型定义简洁的类typedef型名称。
3、为数组定义简洁的类型名称。
4、为指针定义简洁的名称。
定义一个BiTNode类型a:
或结构指针变量->成员名BiTree a = B例如:typedef int abc;iTNode a;
而上面的有typedef的则不要,直接写MyStruct ms;这样
const char p :定义一个指向字符型常量的指针。即typedef struct tagMyStruct MyStruct;后,原先定义结构体变量需要
所以这里就是定义了你给的那个结构体类型变量的一个指针(仅此而已)。struct tagMyStruct ms;
现在只要写成MyStruct ms了。
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。
long lLength;
} MyStruct;
这种定义之后,之后定义struct tagMyStruct结构体变量时,可以直接使用MyStruct代替struct tagMyStruct,例如MyStruct a。
注意如果没有使用typedef,下面这种模式:
long lLength;
};
那么定义结构体变量必须 struct MyStruct a这种方式定义。
所以typedef有简化变量声明的作用,还有就是在跨平台方面有很大作用,定义机器无关类型。
c++标准库使用的 typedef 来创建平台无关类型例如size_t,ptrdiff 和 f_t 。
C里面在定义结构体类型的变量时要有struct关键字,如果按照你下面的写法就必须写成:
struct MyStruct a;
但是使用typedef则是为结构体类型给了一个新名字,按原先上面的写法就直接写成:
MyStruct a;
加上typedef意为标签式定义,在结构体定义之后,在定义类型时直接可以用结构体的名字去定义对象。而不加上typedef的话为类型名定义,也就要求之后再定义对象时需要加上 struct MyStruct 才可以进行对象定义。
定义typedef struct tagMyStruct后 之后定义变量可以直接用 tagMyStruct p来定义
但是struct MyStruct,之后只能用struct MyStruct p来定义
这个是考你结构体的用法。
在C中定义一个结在ANSI C中除了允许有相同类型的结构变量相互赋值以外,一般对结构变量的使用,包括 赋值、输入、输出、运算 等都是通过结构变量的成员来实现的。构体类型要用typedef:
typedef struct Student
{int a;
}Stu; 于是在声明变量的时候就可:
Stu stu1;(如果没有typedef就必须用struct Student stu1; 来声明) 这里的Stu实际上就是 struct Student的别名。
Stu==struct Student 另外这里也可以不写Student
(于是也不能struct Student stu1; 了,必须是Stu stu1;)
typedeftypedef struct tagMyStruct struct
{int a;
}Stu;
bitnode是类型名,等同于struct node。在C++里,bitnode与node是完全一样的类型名。
bitree也是类型名,等同于struct node,就相当于给int 类型名起了一个别名一样。
使用别名的好处多一些,结构名一般都会加_ 这样就避免了在代码处理过程中出现重复的情况,由于作用域不同,结构体定义一般放置在头文件中,在代码编译的时候部分编译器会忽略这个重复错误,导致编译成功,运行失败,错误很难发现,这只是其一,另外,使用别名便于理解,比如突然给你带有结构体的代码1000行,我们看起来几乎是一目十行,看逻辑,如果不使用别名,看起来要对相应的结构一次次定位,会比较累,代码本来就是枯燥的,不要搞的太麻烦,要知道,很多小错误都是因为大脑存储信息量过大而导致的,使用别名可以在大脑中尽可能少的占用内存。写代码时也就会减少一些不必要的错误
typedef就是为一个已有的类型起一个自定义的名字。
BiTNode BiTNode类型,使用格例如:式:
typedef 原类型名 新类型名;
以后在使用int的时候,使用abc代替它了。
int a;和abc a;是等价的。
应typedef实际上就是定义了一种新的数据类型....你这里呢,定义了一种新的数据类型就是 winner..它是pb;一个结构体struct winer p这样呢,就是定义了一个指针p,它指向的是一个winer类型的数据...也就是一个结构体..对于你这种情况呢,这个结构体应该是用于链表的..比如你定义了很多个winer类型的数据,你就可以靠每个变量的p把所有的都链接起来,组成链表.. 比如 winer a,b,c,d;a.p = &b;b.p = &c;c.p = &d;d.p = null;
p是一个希望我的理解对你有所帮助。。。指向本结构类型的指针。这在链表等数据结构里非常有用。
struct LNode
strugetline(text);ct LNode next;
};
这样写的话,就是定义了一个名叫LNode的结构体;如果利用这个结构体定义一个变量就写成:struct LNode abc;
typedef struct LNode
struct LNode next;
}LNode,Linklist;
这个大括号后面的LNode是struct LNode这个结构体类型的别名,这个可以自己起名的,不过在这里比较特殊,别名和结构体的名字一致了,其实可以是任意的名字;Linklist也是指向struct LNode这个结构体的一个指针;也是个别名 ,这时要是在声明一个结构体变量就可以写成 LNode abc;了不要用struct LNode abc了;
这是typedef比较蛋疼的一种用法,因为定义一个类型以后每次出现该类型时都要声明为struct xxxxx name,不知道哪个发明了这种前面加上Typedef,以后声明这个类型就不用前面加上struct了。直接xxx name就可以了。
看这个:
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。