C++中的指针和->操作符

容易引起误解的是->操作符,特别是没什么基础的初学者在cb这样的开发环境中。因为cb中的控件全部属于动态创建的,其返回的全部都是指针。所以常给人这样的感觉:"->"操作符和"."操作符一样,都是成员操作符,所不同的是"."操作符用于静态创建的对象,"->"操作符用于动态创建的对象。

不能说这种说法不对,但是不够深入彻底。回忆C语言中的指针部分,就可以想起,"->"操作符最初是运用于指针的。还记得当时老师说这个符号的时候说过:“你看这个符号的样子,它就是代表指向!”

可能常使用vcl控件,已经将"->"等价于成员操作符了。其实不然,它只是运用于指针。比如有这样一个类(结构体和类基本上一样)TDate;要创建一个类实例,一般有下面两种: TDate date1;                                          //method1 TDate date2 = new TDate();                  //method2 第一种方法是静态创建的,它创建于栈中,返回的是一个TDate型的对象实例,就和int i 一样。而第二种方法是动态创建,它创建于堆中,返回的不是一个对象实例,而是一个指向一个TDate型对象的指针。也就是说,new操作符返回的是一个指针,这个指针指向一个对象实例。这和java或者js或c#不一样,new出来的就直接是对象,因为这些语言中没有指针。所以c++中new出来的对象必须手动delete掉,否则其内存不会自动释放。c++中的new相当于C中的mallon(),而delete相当于C中的free()。

那么如果TDate类中有个成员为int x,那么上述两种方法创建的对象分别访问x的方法为: date1.x         和 date2->x 因为这里date1是一个对象,"."表示对象的成员,date1.x表示对象date1的成员x。而date2是一个指针,"->"表示指针的指向,date2->x表示指针指向的成员x。如果还是不太清楚,那下面的句话应该可以帮助一下理解:(*date2).x和date2->x等价。也就是说,因为date2是一个指针,那么*date2就是一个对象,这时候就可以使用成员操作符.了。之所以用(),是因为.的优先权大于*。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值