提问
我知道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='a'; cout<<charnode.data<<endl; }
输出
a