有结构
struct Person{
Person( int i):id(i){};
Person * next;
int id;
};
class Test{
public:
void addList( Person *&f , Person *&l , int i){
Person *tmp = new Person(i);
if( f == nullptr ){
f = tmp;
l = tmp;
return;
}
first -> next = tmp;
last = tmp;
}
void addArr( int *arr , int i ){
arr[index++] = i;
}
void print( ){
for( int i = 0; i < index; i ++)
cout << arr[i] << " ";
cout << endl;
}
Person *first = nullptr;
Person *last = nullptr;
int index = 0;
int *arr = new int[10];
};
函数addList
将节点添加到链接列表中,addArr
将元素添加到arr
中。
我的问题是关于指针和引用指针。
in
void addList( Person *&f , Person *&l , int i){
Person *tmp = new Person(i);
if( f == nullptr ){
f = tmp;
l = tmp;
return;
}
first -> next = tmp;
last = tmp;
}
我需要将指针作为参考传递。否则,指针的本地副本将不会更改为外部。我假设compilator创建类似
的东西Person *temporary = new Person(*f);
但是我不必通过引用传递数组吗? 我对此很困惑。
答案 0 :(得分:1)
但是我不必通过引用传递数组吗?
在这种情况下,通过在Person
函数中通过引用传递addList
指针,您可以更改指针本身。这就像说,“指针,使用不同的地址”。这是可能的,因为它是通过引用传递的。
而在addArr
函数中,您并没有改变指向数组本身的指针。相反,您正在改变指向的数据。 “指向数据,请使用其他值”。此数据arr
指向的是与函数范围之外的数据相同的数据。
所以,不,你不必通过引用传递数组。