如何为阵列分配不同的地址?

时间:2015-01-26 22:43:19

标签: c++

我想将一个数组传递给一个函数,然后在所述函数中将该数组变量完全指向一个新地址。

我意识到数组在传递给函数时表现为指向第一个元素的地址的指针,那么为什么在main中我的数组变量的地址不会改变呢?

 #include <iostream>

 using namespace std;

 void passArrayByReference(int * array) { //passing array as.        pointer should let us modify it's address, correct?
     cout << "Address of array in function is: " << array << endl; 
     int * localArray = new int [2];
     //put some dummy values in our localArray
     localArray[0] = 9;
     localArray[1] = 9;
     array = localArray;
     cout << "Address of array in function is now: " << array <<      endl; 
 }

 int main()
 {
    int * array = new int [2];
    int totalElements = 2;
    //put some initial values into our dynamic 1D array
    array[0] = 0;
    array[1] = 1;
    //print our initial values
    for(int i = 0; i < totalElements; i++)
         cout << array[i] << endl;
    cout << "Address of array in main: " << array << endl; 
    passArrayByReference(array);
    cout << "Address of array in main: " << array << endl; 

    return 0;
 }

3 个答案:

答案 0 :(得分:2)

你走在正确的轨道上,但你只需要加入'&amp;'函数头中的符号。 '&amp;' symbol用于通过引用传递参数,而不是按值传递。

在这种情况下,您将通过引用将地址传递给数组的第一个元素,这意味着您可以在函数中修改该地址,并且更改将反映在主函数中。

#include <iostream>

using namespace std;

void passArrayByReference(int * &array) {
    cout << "Address of array in function is: " << array << endl; 
    int * localArray = new int [2];
    //put some dummy values in our localArray
    localArray[0] = 9;
    localArray[1] = 9;
    array = localArray;
    cout << "Address of array in function is now: " << array << endl; 
}

int main()
{
   int * array = new int [2];
   int totalElements = 2;
   //put some initial values into our dynamic 1D array
   array[0] = 0;
   array[1] = 1;
   //print our initial values
   for(int i = 0; i < totalElements; i++)
        cout << array[i] << endl;
   cout << "Address of array in main is: " << array << endl; 
   passArrayByReference(array);
   cout << "Address of array in main is now: " << array << endl; 

   //now print the values of our 'new' array
   cout << "The values of array are now:" << endl;
   for(int i = 0; i < totalElements; i++)
        cout << array[i] << endl;

   return 0;
}

答案 1 :(得分:1)

指针也是变量。 这就是为什么您需要将array作为对passArrayByReference的引用,以便您不要修改它的副本。

void passArrayByReference(int *&array)

答案 2 :(得分:1)

首先,您必须通过指针或引用传递指针以对其进行持久更改 - 这是更改原始指针,而不仅仅是复制在函数体中:

 void passArrayByReference(int *&array) {
     //...
     array = new_address;
     std::cout << "Address of array in function is now: " << array << std::endl; 
 }
// and here it is the same

第二,您应该分配有效地址new_address并处理array在进入函数之前引用的内存,以避免内存泄漏