【发布时间】:2021-07-22 05:13:11
【问题描述】:
// 我实在想不通这段代码有什么问题,而且我无法得到初始数组值为零。
#include <iostream>
int* create()
{
int arr[5] = { 0,0,0,0,0 };
return arr;
}
void disp(int arr[])
{
for (int j = 0; j < 5; j++)
{
std::cout << arr[j];
}
std::cout << std::endl;
}
int main()
{
int* mat = create();
std::cout << mat[2] << std::endl;
disp(mat);
}
//what it displays:
0
-858993460-858993460-858993460-8589934604
【问题讨论】:
-
常规数字转换为十六进制为 FFFFFFFDFFFFFFF4。你认得出来吗?
-
arr是函数本地的,返回它是个坏主意,一旦函数返回,它的生命周期就结束了。 -
另一种方法是将
create中的数组声明为static。static关键字将确保数组在执行离开函数后不会消失。