如何将指针数组作为引用传递给函数? 我将动态数组传递给函数,该函数在函数内正常工作但我无法将指针数组作为传递引用传递。 我知道默认情况下,数组是通过引用传递的。 感谢
#include <iostream>
using namespace std;
void printArray(int *arr, int SIZE){
for (int i = 0; i < SIZE; i++)
cout << arr[i] << ' ';
cout << endl;
}
void addData(int *arr, int &SIZE, int data){
int *temp = new int[SIZE];
for (int i = 0; i < SIZE; i++){
arr[i] = i;
temp[i] = arr[i];
}
printArray(temp, SIZE); //Output is: 0 1 2 3 4
printArray(arr, SIZE); //Output is: 0 1 2 3 4
delete arr;
arr = NULL;
arr = new int[SIZE+1];
for (int i = 0; i < SIZE; i++)
arr[i] = temp[i];
arr[SIZE] = data;
SIZE++;
printArray(arr, SIZE); //Output is: 0 1 2 3 4 5
delete temp;
temp = NULL;
}
int main(){
int SIZE = 5;
int *arr = new int[SIZE];
addData(arr, SIZE, 5); //Extend the array by one index to insert data
printArray(arr, SIZE); //Output is: Some garbage values but Output should be: 0 1 2 3 4 5
cout << endl;
system("PAUSE");
return 0;
}
答案 0 :(得分:2)
当您致电int *arr = new int[SIZE];
时,您已分配内存以存储SIZE
int
,arr
指向此内存。
在addData
函数内部调用arr = new int[SIZE+1];
,期望arr
现在指向函数返回时填充新值的内存。但是,当int *arr
传递给void addData(int *arr, int &SIZE, int data)
时,它会被复制。指针变量arr
具有与外部变量相同的值,但它们引用不同的位置。在arr = new int[SIZE+1];
内部变量不再指向与外部变量相同的位置之后。
当您致电printArray
时,您的外部arr
将拥有与您致电int *arr = new int[SIZE];
时相同的垃圾。
您可以通过arr
之类的引用接受void addData(int* &arr, int &SIZE, int data)
参数来解决问题。这将确保内部变量将存储在与外部变量持久变化相同的位置。
您可能会对实际传递指针并观察没有更改持久性这一事实感到困惑。这些更改实际上是为数组元素保留的。例如,如果在函数中编写arr[0] = 2
,则在函数结束后将出现这些更改。但是指针变量本身的更改不会保留。
答案 1 :(得分:0)
函数头应为
0.0