yuAriellexi 2018-10-22 12:56 采纳率: 100%
浏览 773
已采纳

新指针赋地址值给旧指针,为什么旧指针地址还是原来的

地址

//old arr: 400ff8
//new arr: 600148

 void Zoo::D(T *arr, int amount) 
{
    T *newarr = new T[amount-1];
    for (int i = 0; i < amount-1; i++)
    {
        cout << "one die" << endl;
        newarr[i] = arr[i];
    }
    amount = amount - 1;
<strong>    arr = newarr;</strong>
    delete []newarr;
    cout << newarr << endl;//output : 600148
}

    D(arrT, num);
    cout << arrT << endl;//output: 400ff8

//为什么arrT的值不是newarr的值,因为=

  • 写回答

6条回答 默认 最新

  • xingjianfengaa 2018-10-23 01:06
    关注

    你可以打印或调试监视一下

    D(arrT, num);这个arrT和
    void Zoo::D(T *arr, int amount)里面的arr的地址并不一样,可能 内容是一样的,正常函数的参数都只是原来变量的一个复制体,其实并不是同一个东西,所以你里面赋了值 外面那个并不会改变,
    修改如楼上所说,要么传引用,引用参数不会有复制传的就是本身,进去修改的就是这个变量
    D(arrT, num);
    void Zoo::D(T *&arr, int amount)
    或指针的指针,这样不管它复制多少次,指针指向的内容是不会变量的,而指向的内容正是你要修改的目标arrT
    D(&arrT, num);
    void Zoo::D(T **arr, int amount){ ……*arr=newnear;……}

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

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多