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

Equality between pointers in a function c++

本文关键字:之间 c++ 指针 函数      更新时间:2023-10-16

你能告诉我在函数中使指向指针相等时出了什么问题吗。让我们看看这个例子:

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;
}
void fun(int *array1)
{
    int array2[5];
    for(int i=0;i<5;i++)
    {
        array2[i]=3;
    }
    array1=array2; // **HERE**
}

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

当然,它甚至没有做到这一点。CCD_ 3将CCD_ 4变量设置为指向CCD_。但它们都是局部变量,所以这对调用者没有任何影响。

也许你想要:

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

但这是C++,您应该使用一个合理的容器,比如std::array。

您在有趣的函数中创建了一个带有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指向在主函数中调用的数组