C++的 typedef 与 结构类型重命名 指针

来源:互联网 发布:linux 查看cpu核数 编辑:程序博客网 时间:2024/05/16 12:46

问题:

typedef struct OLNode{
int i,j;
int e;
struct OLNode *right,*down;
}OLNode,*OLink;
这里的*OLink是什么意思?OLink a;这样定义的变量a算是什么,怎么回事?

 

解答:

 

定义完上面的Struct后,将这个定义命名为 OLNode,或者 *OLink,后者是一个指针。当你用这个定义a的时候,就是 OLink a,就是定义a为一个指向 stuct OLNode的指针。
明白了吧?这样写只是为了让写指针的时候少写个*而已。一般老程序员常常喜欢这么做。

 

这里typedef实现的是类型的重命名。
typedef:
struct OLNode{
int i,j;
int e;
struct OLNode *right,*down;
}OLNode,*OLink;


这一过程定义了一个OLNode结构体,并生成了一个OLNode对象 和 一个OLNode对象指针,


相当于如下过程:
struct OLNode{
int i,j;
int e;
struct OLNode *right,*down;
};

struct OLNode OLNode ;
struct OLNode *Link;


而使用了typedef后和上述过程基本没什么区别,只是把你自定的这种结构体数据类型进行了类型重命名,这样当你定义一个对象的时候可以使用:
OLNode a;这里a是一个对象!相当于 struct OLNode a;
而当你定义一个这种结构体对象指针时可以使用:
OLink a;这里a是一个对象指针,相当于 struct  OLNode *a;

使用tepedef好处是编程少些几个字母,编程中使用struct OLNode OLNode ; struct OLNode *Link; 虽然多写几个字母,但是很明确的知道你定义的变量是一个结构体。各有利弊