几个小论调

今天有个同学问了我个问题我觉得很有意思所以就在这里写下来分享下:

问题一:是在自己写链表实现函数中时

void initList(Node** pNode)

{

       *pNode=NULL;

}

此处的pNode为什么要声明为NODE** 而不是NODE*?

此问题乍看将pNODE生米NODE*也是合理的,其实本质上还是将没有将函数的参数传递搞清楚,下面我就通过使用typedef来从新梳理下这个问题。

首先我们明白要想指向一个NODE则这个必须为一个NODE* 类型的指针,那么我们给NODE* 起一个别名

typedef  NODE*  P_NODE;

这样我们继续讨论函数参数的问题,对于一个函数来说当我们想改变参数的值并且想让也体现在函数之外时我们是要将这个函数的参数设置为该类型的指针的,那么就可以进行如下定义:

P_NODE*  pNode;

如果按照typedef别名的含义来进行替换的话那么所有的代码就变成了

NODE**  pNode;

总体上来说此处出现错误的理解主要是因为数据本身就是一个指针类型,同时我们又将它传递给一个函数并且我们想在函数中对其值进行修改所以就要出现指针的指针的情况了。

问题二:void   CMyClass::fun()const 此处的const含义是什么,有什么隐含的易犯的错误么?

首先我们清楚C++是从C语言中变化而来的,C++编译器在对C++代码进行编译时进行了许多的“暗操作”,其中有一个就是为每一个类的成员函数添加了一个this参数,这个参数的类型就是当前类的数据类型。此处存在的const就是在修饰this这个参数,从而我们明白了此处的this是一个常量,我们在成员函数中不能对其的值进行修改。

其次我们来探讨下隐含的错误吧:

void CMyClass::fun()const

{

.......

       change()

       ........

}

其中change()将要对this指针中的一些数据进行修改,那么此时就会出现编译错误了:企图调用非const函数。这就告诉我们在一个类的常成员函数中,只能调用常成员函数。









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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值