函数c ++中指针之间的相等性

时间:2013-02-19 00:48:18

标签: c++ pointers

在函数中指针之间的相等性时,能否告诉我有什么问题?让我们看看这个例子:

void fun(int *array1)
{
    int array2[5];
    for(int i=0;i<5;i++)
    {
        array2[i]=3;
    }
    array1=array2;
}


int main(){
    int x[5]; int n=5;
    for(int i=0;i<5;i++){
    x[i]=i; // --------> x[i]=i;
    }

    fun(x); //--------> x[i]=3

    for(int i=0;i<5;i++){
    cout<< x[i]<<" "; //-------> x[i]=i?????????? I expected x[i]=3;
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

void fun(int *array1)
{
    int array2[5];
    for(int i=0;i<5;i++)
    {
        array2[i]=3;
    }
    array1=array2; // **HERE**
}

当此函数返回时,array2不再存在。因此,即使这确实将array1的值返回给调用者,调用者也只会指向一个不再存在的数组。

当然,它甚至没有这样做。 array1=array2;array1变量设置为指向array2。但它们都是局部变量,所以这对调用者没有任何影响。

也许你想要:

 memcpy(array1, array2, sizeof(array2));

但这是C ++,你应该使用像std::array这样的合理容器。

答案 1 :(得分:2)

你在我认为你打算做的有趣功能中使用int [5]创建一个新数组:

/**
  * not every array is 5 items long, thus it is unsafe
  */

void fun(int *array1)
{
    int* array2 = array1;
    for(int i=0;i<5;i++)
    {
        array2[i]=3;
    }
}

now int * array2指向您在main函数中调用的数组