数据结构中 typedef struct 用法
struct LNode next;struct LNode
typedef用法_c语言中的typedef用法
typedef用法_c语言中的typedef用法
{ ElemType data;
};
这样写的话,就是定义了一个名叫LNode的结构体;如果利用这个结构体定义一个变量就写成:struct LNode abc;
typedef struct LNode
{ ElemType data;
}LNode,Linklist;
这个大括号后面的LNode是struct LNode这个结构体类型的别名,这个可以自己起名的,不过在这里比较特殊,别名和结构体的名字一致了,其实可以是任意的名字;Linklist也是指向struct LNode这个结构体的一个指针;也是个别名 ,这时要是在声明一个结构体变量就可以写成 LNode abc;了不要用struct LNode abc了;
这是typedef比较蛋疼的一种用法,因为定义一个类型以后每次出现该类型时都要声明为struct xxxxx name,不知道哪个发明了这种前当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗面加上Typedef,以后声明这个类型就不用前面加上struct了。直接xxx name就可以了。
后面出现的LNode,Linklist都是由LNode类型的。你没学过自己定义类型先去看下。定义struct在c中还是很重要的
typedef unsigned short int ut 是什么意思?
typedef struct Student可以这样来记住typedef的用法:
这种声明的一般形式为:在定义变量的语句的前面加上关键字typedef,就变成了类型定义了。其实就是定义了个类型别名,目的是方便使用。而且要修改也只用改一处。
unsigned short int n; //定义了变量n,类型是unsigned short int
用法总结
如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法:
使用typedef为现有类型创建别名,定义易于记忆的类型名
typedefintsize;
voidmeasure(sizepsz);
sizelen=file.getlength();
std::vector
typedef 还可以掩饰复合类型,如指针和数组。
例如,你不用像下面这样重复定义有 81 个字符元素的数组:
charline[81];
chartext[81];
只需这样定义,Line类型即代表了具有81个元素的字符数组,使用方法如下:
typedef char Line[81];
Linetext,line;
getline(text);
同样,可以像下面这样隐藏指针语法:
intmystrcmp(constpstrp1,constpstrp3);
用GNU的gcc和g++编译器,是会出现的,按照顺序,“const pstr”被解释为“char const”(一个指向char的指针常量),而事实上,const char和char const表达的并非同一意思,const char的意思是创建一个指向char类型的指针且不能更改指向地址上的值,而char const则是不能更改指向的地址;
char const p : 定义一个指向字符的指针常数,即const指针,常量指针。
const char p :定义一个指向字符型常量的指针。
语言用法
基本解释
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
2. typedef & 结构的问题
如果能编译通过,说明“有意思”
如果通不过,说明“没什么意思”
就这么简单
^_^
类型定义
之后
你用
unsigned short int i;
和ut i;
效果是一样的
定义一个名为index的数据类型,其类型等价于unsigned int(无符号整型)。
用typedef后不是说原来的结构体类型还可以用吗,为什么不可以用S定义结构体变量
看这个:这个是考你结构体的用法。
那么定义结构体变量必须 struct MyStruct a这种方式定义。在C中定义一个结构体类型要用typedef:
{int a;
}Stu; 于是在声明变量的时候就可:
Stu stu1;(如果没有typedef就必须用struct Student stu1; 来声明) 这里的Stu实际上就是 struct Student的别名。
Stu==struct Student 另外这里也可以不写Student
(于是也不能struct Student stu1; 了,必须是Stu stu1;)
typedef struct
{int a;
}Stu;
typedef struct {...}Pstr; 这个指针是什么意思?
typedefcharpstr;例如:
tyoedef int Pint;
表示的意思并不是定义一个指向int型指针,而是表示定义一种新的数据类型,这种类型是指向int型的指针,那么如果下面有Pint a;则这时的a是指向int型指针
同理
typedef struct
{...
}Pstr;
但是很显然p是悬垂指针,而题中这种情况是不能静态分配数据的
所以可以动态的分配一个空间来让p有所指向
C++可以这么做:p=new 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去定义和声明 该结构的指针类型
求解答c语言结构体定义中typedef的作用
所以这里就是定义了你给的那个结构体类型变量的一个指针(仅此而已)。写成下面的是简单,但是定义一个结构体变量的时候呢就麻烦了。
而上面的有typedef的则不要,直接写MyStruct ms;这样
即typedef struct tagMyStruct MyStruct;后,原先定义结构体变量需要
struct tagMyStruct ms;
现在只要写成MyStruct ms了。
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。
typedef struct tagMyStruct
{int iNum;
long lLength;
} MyStruct;
这种定义之后,之后定义struct tagMyStruct结构体变量时,可以直接使用MyStruct代替struct tagMyStruct,例如MyStruct a。
注意如果没有使用typedef,下面这种模式:
struct MyStruct
{int iNum;
long lLength;
};
所以typedef有简化变量声明的作用,还有就是在跨平台方面有很大作用,定义机器无关类型。
C里面在定义结构体类型的变量时要有struct关键字,如果按照你下面的写法就必须写成:
struct MyStruct a;
但是使用typedef则是为结构体类型给了一个新名字,按原先上面的写法就直接写成:
MyStruct a;
加上typedef意为标签式定义例如: enum weekday { sun,mou,tue,wed,thu,fri,sat };,在结构体定义之后,在定义类型时直接可以用结构体的名字去定义对象。而不加上typedef的话为类型名定义,也就要求之后再定义对象时需要加上 struct MyStruct 才可以进行对象定义。
定义typedef struct tagMyStruct后 之后定义变量可以直接用 tagMyStruct p来定义
但是struct MyStruct,之后只能用struct MyStruct p来定义
typedeflonglong11用法
使用:typedef int ElemType;//定义ElemType为int类型你想让它是什么类型自己用typedef重定义就行。也可以用模板表示,类似template1、为基本数据类型定义新的类型名。
2、为自定义数据类型结构体、共用体和枚举类型定义简洁的类型名称。
3、为数组定义简洁的类型名称。
4、为指针定义所以下面如果有Pstr p;则p是一个指向结构体的指针简洁的名称。
为什么在使用typedef时,一定要使用typedef struct?
但是又有此需求,为了解决这个问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。typedef struct
{ElemType data[maxsize];
intypedef unsigned short int ut; //变成了定义了类型utt length;
} array;
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便,具体区别在于:
若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;区别就在于使用时,是否可以省去struct这个关键字。
C++结构体的定义typedef
结构变量的赋值就是给各成员赋值。bitnode是类型名,等同于struct node。在C++里,bitnode与node是完全一样的类型名。
而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。bitree也是类型名,等同于struct node,就相当于给int 类型名起了一个别名一样。
使用别名的好处多一些,结构名一般都会加_ 这样就避免了在代码处理过程中出现重复的情况,由于作用域不同,结构体定义一般放置在头文件中,在代码编译的时候部分编译器会忽略这个重复错误,导致编译成功,运行失败,错误很难发现,这只是其一,另外,使用别名便于理解,比如突然给你带有结构体的代码1000行,我们看起来几乎是一目十行,看逻辑,如果不使用别名,看起来要对相应的结构一次次定位,会比较累,代码本来就是枯燥的,不要搞的太麻烦,要知道,很多小错误都是因为大脑存储信息量过大而导致的,使用别名可以在大脑中尽可能少的占用内存。写代码时也就会减少一些不必要的错误
typedef就是为一个已有的类型起一个自定义的名字。
使用格式:
typedef 原类型名 新类型名;
例如:typedef int abc;
以后在使用int的时候,使用abc代替它了。
int a;和abc a;是等价的。
typedef用法BiTNode,BiTree;都是什么,起什么作用的
枚举是一种 基本数据类型 ,而不是一种 构造类型 ,因为他不能再分解为任何基本类型。BiTNode BiTNode类型,
例如,BiTree 指向BiTNode类型的指针;
定义一个BiTNode类型a:
BiTNode a ;
BiTree a = BiTNode a;
c语言如何使用typedef定义一个函数指针类型,该指针类型指向一个不需要参数,并且返回值为int
不要头文件。typedef int(PointN在定义结构体array的时候有这样一段:ameToFunc)(void);
请多在网路上搜寻, 已经有很多参考资料.
typedef int (funptr)(void);
typedef int (FUN_TYPE) (void);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 836084111@qq.com 举报,一经查实,本站将立刻删除。