指针和引用的区别是什么?我是指内部实现上,我们应该如何取舍呢?

edwardyi 2000-07-21 10:12:00
指针和引用的区别是什么?我是指内部实现上,我们应该如何取舍呢?
...全文
160 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cleverxyz 2001-03-11
  • 打赏
  • 举报
回复
谭浩强书里的原话:“指针变量是要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元。这种用法比使用指针变量简单、直观、方便。”
wangshiqi 2001-03-11
  • 打赏
  • 举报
回复
应该也
给binbin甲酚,可惜没了
binbin 2000-12-20
  • 打赏
  • 举报
回复
我想内部实现应该是一样的。引用只是提供了一种更容易理解和使用的方式。
jinn 2000-07-21
  • 打赏
  • 举报
回复
传送引用和传送变量的指针是一样的,两者均只传送变量的地址
hyzx2000 2000-07-21
  • 打赏
  • 举报
回复
我在VC中用Debug模式查看下面两个函数的汇编代码,汇编代码是一样的。
int F(int *pInt)
{
return *pInt;
}
int G(int &pInt)
{
return pInt;
}
汇编代码如下:
17: int F(int *pInt)
18: {
00401800 push ebp
00401801 mov ebp,esp
00401803 sub esp,40h
00401806 push ebx
00401807 push esi
00401808 push edi
00401809 lea edi,[ebp-40h]
0040180C mov ecx,10h
00401811 mov eax,0CCCCCCCCh
00401816 rep stos dword ptr [edi]
19:
20: return *pInt;
00401818 mov eax,dword ptr [ebp+8]
0040181B mov eax,dword ptr [eax]
21: }


23: int G(int &pInt)
24: {
00401860 push ebp
00401861 mov ebp,esp
00401863 sub esp,40h
00401866 push ebx
00401867 push esi
00401868 push edi
00401869 lea edi,[ebp-40h]
0040186C mov ecx,10h
00401871 mov eax,0CCCCCCCCh
00401876 rep stos dword ptr [edi]
25: return pInt;
00401878 mov eax,dword ptr [ebp+8]
0040187B mov eax,dword ptr [eax]
26: }


guojin 2000-07-21
  • 打赏
  • 举报
回复
关注
hyzx2000 2000-07-21
  • 打赏
  • 举报
回复
我认为引用在实现上,是通过传地址实现的。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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