如何将指针数组作为引用传递传递给函数?
How to pass a pointer array to a function as pass by reference?
如何将指针数组作为引用传递传递给函数?
我将一个动态数组传递给一个在函数内正常工作的函数,但我无法将指针数组作为引用传递传递。
我知道默认情况下数组是通过引用传递的。
谢谢
#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;
}
函数头应该是
void addData(int &*arr, int &SIZE, int data)
当您调用 int *arr = new int[SIZE];
时,您已分配内存来存储 int
的 SIZE
,并且 arr
指向此内存。
在 addData
函数中调用 arr = new int[SIZE+1];
期望 arr
现在指向在函数 returns 时填充新值的内存。但是,当 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
,那么这些更改将在函数结束后出现。但是指针变量本身的更改不会持久化。
如何将指针数组作为引用传递传递给函数? 我将一个动态数组传递给一个在函数内正常工作的函数,但我无法将指针数组作为引用传递传递。 我知道默认情况下数组是通过引用传递的。 谢谢
#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;
}
函数头应该是
void addData(int &*arr, int &SIZE, int data)
当您调用 int *arr = new int[SIZE];
时,您已分配内存来存储 int
的 SIZE
,并且 arr
指向此内存。
在 addData
函数中调用 arr = new int[SIZE+1];
期望 arr
现在指向在函数 returns 时填充新值的内存。但是,当 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
,那么这些更改将在函数结束后出现。但是指针变量本身的更改不会持久化。