地址
//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,赋值不能传出去的