初探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='a';
    cout<<charnode.data<<endl;
}


 

输出

a

 

 

 

 

 

 

 

 

初探C/C++ typedef关键字,布布扣,bubuko.com

初探C/C++ typedef关键字

上一篇:Java设计模式(一)普通工场模式,抽象工场模式


下一篇:PCL配置(PCL1.9.1+Win10+Visual Studio 2017)