参数列表中的引用和指针

涵树_fx 2008-12-27 09:59:19
各位C++前辈好!
我在用MFC中的CRichEditCtrl进行开发时,发现有这么一个函数定义:
long FindText(
DWORD dwFlags,
FINDTEXTEX* pFindText
) const;

我的问题是,为什么不把函数声明成如下形式:
long FindText(
DWORD dwFlags,
FINDTEXTEX & pFindText
) const;

在参数列表中,使用引用和使用指针有什么本质的区别吗?我在C++的学习中还不够深入,还望各位高手多多指教。
...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DLevel 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaoyisnail 的回复:]
传指针还是以值的方式传参数,函数里面只能修改指针指向的对象而不能改变指针本身
用引用就是使用c++的按引用的方式传参,如果是非const引用的话函数里可以修改实参
[/Quote]
有理
涵树_fx 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 firefox1 的回复:]
谢谢大家的回复。楼上的朋友们几乎认为指针和引用是等价的,我目前也是这个看法。但是在CRichEditCtrl的成员函数中,还有另外一个声明:
DWORD GetSelectionCharFormat(
  CHARFORMAT& cf
) const;
为什么这个函数不声明为如下形式:
DWORD GetSelectionCharFormat(
  CHARFORMAT* cf
) const;

我想微软的构架师在设计MFC类库时,应该不是想当然的在参数列表中使用引用和指针吧。会不会是在使用的上下文中有什么区别呢?…
[/Quote]
如果本质上没有区别,为什么在CRichEditCtrl的成员方法定义中,为什么不把两个函数都定义为:
DWORD GetSelectionCharFormat(
CHARFORMAT* cf
) const;

long FindText(
DWORD dwFlags,
FINDTEXTEX* pFindText
) const;
不知道大家在设计代码的参数列表时,一般是如何判断是选择引用传递参数还是用指针传递参数
奔跑哥 2008-12-28
  • 打赏
  • 举报
回复
本质上没有什么区别,只是指针你需要判断是否为null,引用不需要。
hityct1 2008-12-28
  • 打赏
  • 举报
回复
没办法啊,c++还要肩负兼容c重任。
hityct1 2008-12-28
  • 打赏
  • 举报
回复
我是这么认为:
1)mfc类的是对win API的封装,而API可以说是C语言,C语言没有引用的概念。
2)保持了风格一致,封装方便。
3)c程序员用着也习惯。
涵树_fx 2008-12-27
  • 打赏
  • 举报
回复
谢谢大家的回复。楼上的朋友们几乎认为指针和引用是等价的,我目前也是这个看法。但是在CRichEditCtrl的成员函数中,还有另外一个声明:
DWORD GetSelectionCharFormat(
CHARFORMAT& cf
) const;
为什么这个函数不声明为如下形式:
DWORD GetSelectionCharFormat(
CHARFORMAT* cf
) const;

我想微软的构架师在设计MFC类库时,应该不是想当然的在参数列表中使用引用和指针吧。会不会是在使用的上下文中有什么区别呢?

还望各位多多指教。
xiaoyisnail 2008-12-27
  • 打赏
  • 举报
回复
传指针还是以值的方式传参数,函数里面只能修改指针指向的对象而不能改变指针本身
用引用就是使用c++的按引用的方式传参,如果是非const引用的话函数里可以修改实参
天外来客-007 2008-12-27
  • 打赏
  • 举报
回复
1. 传递的都是地址,没有本质区别,使用引用传递的地址无需进行有效性检查,指针传递的则要进行检查。
2. 至于为什么不那样声明,真还不知道!
3. 如有错误,敬请指正!
majun01 2008-12-27
  • 打赏
  • 举报
回复
引用可以看做是特殊的指针——这个指针指向一个内存后,就不能再指向其他内存地址了。不像一般
的指针,指向一个内存后,还可以重新指向其他内存地址。
feeboby 2008-12-27
  • 打赏
  • 举报
回复
基本上没有区别
只有编码上的区别

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧