当从函数返回数组作为参数时,为什么我从函数中的数组中获取随机值?

时间:2016-10-15 07:21:49

标签: c++ arrays pass-by-reference

我想在另一个函数的函数中通过引用传递数组。这是我的代码

// Objectives:
// 1. Passing an array to a method
// 2. Returning arrays from a method

#include <iostream>
using namespace std;

int getArray(int* arr) {
    for (int i=0; i< 11; i++) {
        cout << arr[i] << endl;
    }
    return 0;
}

int* returnArray() {
    int arr [11] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21};
    return arr;
}

int main() {
    getArray(returnArray());
    return 0;
}

这是我的输出:

get_return_array.cpp:17:12: warning: address of stack memory associated with local variable 'arr' returned
      [-Wreturn-stack-address]
return arr;
           ^~~
1 warning generated.
1
32767
170167402
1
9
11
2051556088
32767
17
9
1436251616

为什么数组的值是一些垃圾值以及警告表示什么?

标记为重复,为什么?:我已将static的用法与解释显示,而其他人的答案则没有。

1 个答案:

答案 0 :(得分:-1)

C ++不提倡将本地数组传递给外部函数。 arr的生命周期是它的父函数运行。如果完成任何新的分配,则arr堆栈中的值将被覆盖。

因此,要克服此限制,我们必须使用static,其目的是静态分配值,以便其生命周期延长到程序运行。

这就是为什么数组有一些垃圾值。

正确的程序将是

#include <iostream>
using namespace std;

int getArray(int* arr) {
    for (int i=0; i< 11; i++) {
        cout << arr[i] << endl;
    }
    return 0;
}

int* returnArray() {
    static int arr [11] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21};
    return arr;
}

int main() {
    getArray(returnArray());
    return 0;
}

它的相应输出是:

1
3
5
7
9
11
13
15
17
19
21

干杯