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

标签 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;
}

最佳答案

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

关于c++ - 函数c++中指针之间的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14947997/

相关文章:

带指针参数的 C++ 函数

c++ - 使用 C++ POSIX 类的 Objective C 项目

c++ - MATLAB 中的 fft2 与 OpenCV C++ 中的 dft 速度比较

Android:Vulkan 层已停止在设备上运行

c++ - 通过c++在windows和linux上读取UTF8文件

c - 4位十进制到16位二进制转换码

c++ - Socket select() 处理突然断开

c - C 中的 sprintf(指向 char 元素数组的指针)

c - 如何使用指向结构的指针进行迭代?

c# - 从 c 调用 mono_method(指针)