我想在另一个函数的函数中通过引用传递数组。这是我的代码
// 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
的用法与解释显示,而其他人的答案则没有。
答案 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
干杯