typedef中的指针

关于typedef和define在程序运行中的作用。


例:

#define a int

typedef int a;


define是展开,纯展开。不是调用。如例,int就像一只悬挂在a上面的一块石头,就随时准备着,你说需要的时候,它就“啪”的一声掉下来,把原本定义的名字砸在下面。展现出原本的自己。别的它不管不问了,融入代码的海洋中了。(所以切记int后面不要加“;”)

而typedef是重定义,比如,将int 重定义一种名字,也可以这样理解,在C语言中,就好像有两个表示整形的关键字了,一个是int,一个是a。(当然我知道这是不允许的)它成为了一种已存在的类型。


一。

在typedef中使用指针往往会带来意外的结果。 

如:
typedef string* pstring; 
const    pstring cstr; 
请问cstr变量是什么类型?? 
简单的回答是const pstring类型的指针。进一步问:const pstring指针所表示的真实类型是什么? 
很多人都认为真正的类型是: const string* cstr; 
也就是说,const pstring是一种指针,指向的string类型的const对象,但这是错误的。 
错误的原因在于将typedef当作文本扩展了。声明const pstring时,const修饰的是pstring类型,这是一个指针。因此,该声明语句应该是把cstr定义为指向string类型对象的const指针,这个定义等价为: string* const cstr;


二。

而define中使用指针。

不赞成用define定义,但是如果遇到了其实也很好解决。

define是在程序预处理过程中就展开的。

#define pstring string* 

const pstring cstr;

在读代码的时候,只需要将其展开即可:const string* cstr;

由此cstr为常量指针。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值