0

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

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;
}
4

2 回答 2

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这样的合理容器。

于 2013-02-19T00:54:22.107 回答
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;
    }
}

现在 int* array2 指向你在主函数中调用的数组

于 2013-02-19T01:00:11.437 回答