C++传递指针

coo*_*lio 0 c++ pointers scope

我期待下面的代码打印1,但它打印一个随机的大数字.我不明白为什么会这样,请指教.

#include <iostream>
using namespace std;

int * returnArray()
{
    int myArray[5]={1,2,3,4,5};
    return myArray;
}

void printArray(int * myArray)
{
    cout << *myArray<< endl;
}

int main()
{
    printArray(returnArray());
}
Run Code Online (Sandbox Code Playgroud)

Jaa*_*koK 5

在您的代码中,returnArray返回指向myArray函数本地的第一个元素的指针.当函数返回时,其局部变量的内存在弹出调​​用堆栈时释放,因此可用于其他目的.在这种情况下,由于您printArray之后调用,最初占用的堆栈区域returnArray将被重用printArray,因此最初包含的内存myArray现在具有不可预测的内容.

正如詹姆斯坎泽指出的那样,实现你想要的最好的方法可能就是使用std::vector<int>而不是int*像这样的东西

std::vector<int> returnArray()
{
    int myArray[5] = { 1, 2, 3, 4, 5 };
    std::vector<int> result(myArray, myArray + 5);
    return result
}
Run Code Online (Sandbox Code Playgroud)

并相应地修改其他函数以获取向量.请注意,printArray您需要myVector[0]访问第一个元素,因为向量不是指针.