传引用得到的是指针

bazookier 2009-10-09 10:04:54
比如比较复杂的程序抽象成如下
void getFunc(int& a)
{
a=2; //<----------------跟到这里
}

int main(int argc,char* argv[])
{
int * p;
int i=1;
p=&i;
getFunc(*p);
return 0;
}

用gdb跟踪到这里,发现a是个指针而不是值。这是怎么回事。使用的是GNU,是不是编译器有问题?
...全文
74 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bazookier 2009-11-01
  • 打赏
  • 举报
回复
问题解决!
失落的凡凡 2009-10-09
  • 打赏
  • 举报
回复
楼主是用的GDB么?我调试时 p a是这样显示的:
&1= (int &) @0x22cc90: 1
失落的凡凡 2009-10-09
  • 打赏
  • 举报
回复
我也试试
必成桂 2009-10-09
  • 打赏
  • 举报
回复
毫无疑问a的type是int &。

引用的底层实现就是指针。我是在想不到还有什么别的机制能实现了。
bitxinhai 2009-10-09
  • 打赏
  • 举报
回复
void getFunc(int& a)
{
a=2;
}

int main(int argc,char* argv[])
{
int * p;
int i=1;

getFunc(i); //对于引用,只需要把普通变量传过去就行了
return 0;
}
fisker0303 2009-10-09
  • 打赏
  • 举报
回复
如果不是release版产生了优化,那可能就是调试器有问题。
fisker0303 2009-10-09
  • 打赏
  • 举报
回复
vc2005中显示正常,值为“1”
fox000002 2009-10-09
  • 打赏
  • 举报
回复
底层的话,当然用的是一个内存地址

不知 lz 怎么知道是不是指针
illuminati 2009-10-09
  • 打赏
  • 举报
回复
关注中

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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