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

地址

//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的值,因为=

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

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;……}

你那是赋值,不是赋地址

 arr[i]==*(arr+i)

我说的是arr = newarr

如果你要改变,那么要么传引用,要么传指针的指针,一个指针,只能改变值,不能改指针。

D()传递的是副本,不是指针本身的值,可以理解为两个指针指向同一个值,但是指针本身的值不同,类似与*P1 = *p2, 但是p1 != p2

应该传指针的指针,因为指针也是相当于一个int,赋值不能传出去的