首页 > 解决方案 > 有人可以在从函数返回数组时解释输出的行为吗?

问题描述

代码:

#include<iostream>

using namespace std;

int * arrayReturn();

int main(){
    
    for(int i=0; i<10; i++){
        cout<<"Value at "<<i<<": "<<arrayReturn()[i]<<endl;
    }
    
    return 0;
}

int * arrayReturn(){
    static int arr[] = {10,20,30,40};
    
    return arr;
}

输出: 在此处输入图像描述

问题: 任何人都可以评论代码的输出吗?为什么第 4 位的值是 4659536 和 -1 在第 8 和第 9 位而不是 0?

注意:请避免建议更正代码(这只是一个测试代码),只提供输出的原因。

标签: c++arraysfunction

解决方案


我编译并执行了你的代码。

这是输出:

$ ./sample.o 
Value at 0: 10
Value at 1: 20
Value at 2: 30
Value at 3: 40
Value at 4: -346453624
Value at 5: 32646
Value at 6: -346453584
Value at 7: 32646
Value at 8: 6
Value at 9: 0

请注意从索引 4 开始的值。他们是垃圾。

由于原始数组仅包含 4 个元素,因此在不进入未定义行为区域的情况下,您无法真正超越第 4 个元素(第 3 个索引)。

每次执行代码时,您可能会得到不同的值。


推荐阅读