如何将指针数组作为引用传递给函数?

时间:2016-03-29 21:55:53

标签: c++ arrays function pointers 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;
}

Output

2 个答案:

答案 0 :(得分:2)

当您致电int *arr = new int[SIZE];时,您已分配内存以存储SIZE intarr指向此内存。

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