在函数返回中将数组转换为指针

0 c++ pointers return function

我在C++中遇到了关于指针的问题.代码是:

int * initArray() {
    int a [2];

    a[0] = 1;
    a[1] = 2;
    return a;
}


int main () {
    int * b = initArray();

    cout << b << "---" << *(b) << endl;
    cout << b + 1<< "---" << *(b + 1) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出是

0021FC20---1
0021FC24---1431629120
Run Code Online (Sandbox Code Playgroud)

你可以看到值是错误的.

当我尝试将init数组代码放入main函数时,它正确运行.

你能告诉我的代码有什么问题吗?

cod*_*ict 8

initArray返回函数返回后不再存在的本地数组的地址.这是一种未定义的行为.

要使变量a持久化,即使函数返回,您也可以:

  • 声明为 static
  • 让它全球化
  • 动态分配它