初探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

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值