首页 > 代码库 > 初探C/C++ typedef关键字

初探C/C++ typedef关键字

提问

 

我知道typedef是类型别名的意思,也知道结构体如何定义。
但下面的代码:
typedef struct node{
struct node*lchild;
char data;
struct node*rchild;
}bitnode,*bitree;
那这样结构体后面的是对象还是别名呢?我感觉应该是对象,但typedef又无从说起。
然后接着有
bitree createtree(){
    ……
}
很明显bitree是一种类型,但他又是一个指针,我能说他就是指向这个结构体的对象的指针么?

 

回答

 

其实谭老的那本C语言教材,讲得很明白了。

bitnode是类型名,等同于struct node。在C++里,bitnode与node是完全一样的类型名。
bitree也是类型名,等同于struct node*,就相当于你给int* 类型名起了一个别名一样。

 

 

 

追问
照你这么说,node等同于bitnode,他何必要多定义一个。况且bitree也可以用node*来表达,并不很麻烦。
回答
在C语言里,比如你定义一个结构体:struct Stu{    int id;    float score;};那么在你定义变量的时候,一定要带上struct才行,即:struct Stu stu;但是在C++里,跟class一样,不用带struct也行了,即:Stu stu;那么在C语言里为了少写一个struct,就要借助于typedef:typedef struct{    int id;    float score;}Stu;这样定义变量的时候,就可以直接用Stu;bittree和node*就是一个意思,改个定义确实没什么意思,而且我也觉得还不如用node*,这样更能让人理解为它是一个指针。
提问者评价
谢谢!

 

 

 

 

#include<iostream>#include<string>using namespace std;typedef struct node{struct node*lchild;char data;struct node*rchild;}bitnode,*bitree;int main(){    bitnode charnode;    bitree pnode = &charnode;    pnode->data=http://www.mamicode.com/'a';>


 

输出

a