hhh_lijun 2016-07-11 15:19 采纳率: 50%
浏览 984
已采纳

C++引用中按址传递的疑问

图片说明
我看不懂为什么swap函数中 a:<<*a 就是输出a的值 而不是a的地址呢
void swap(int*a,int*b)和swap(&a,&b),*a保存a的地址嘛,为什么反而是a:<<a
输出的是a的地址
求求大神解答了!!!!!!!

  • 写回答

5条回答

  • isaaccwoo 2016-07-12 00:57
    关注

    我比较同意 @iimagine 的观点,尽量不要定义重复的变量名(特别是初学的时候),这不仅影响你理解程序,而且别人回答问题也比较麻烦:变量a还要区分是主函数的int a还是 swap()参数内的int *a.

    你把主函数名字修改一下,就能看清楚了

    #include <iostream>
    
    void swap(int *a, int *b)
    {
        int c;
        std::cout <<"[swap][before] a=" << *a << ", b=" << *b <<std::endl;
        c = *a;
        *a = *b;
        *b = c;
        std::cout <<"[swap][after] a=" << *a << ", b=" << *b <<std::endl;
    }
    
    int main()
    {
        int num1=3, num2=4;
        std::cout <<"[main][before] num1=" << num1 << ", num2=" << num2 <<std::endl;
        swap(&num1, &num2);
        std::cout <<"[main][after] num1=" << num1 << ", num2=" << num2 <<std::endl;
        return 0;
    }
    

    a, b是 int *类型, a和b是地址,*a和*b是值
    num1和num2是 int类型,&num1和&num2是地址,num1和num2是值
    函数调用的时候,就是把&num1给a,&num2给b

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!