为什么我从函数中返回数组作为参数时从函数中的数组中获取随机值?
Why I am getting random values from array in a function when returning an array from a function as an argument?
我想在一个函数中通过引用从另一个函数传递一个数组。下面是我的代码
// 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
的用法和解释,而其他人的答案没有。
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
干杯
我想在一个函数中通过引用从另一个函数传递一个数组。下面是我的代码
// 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
的用法和解释,而其他人的答案没有。
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
干杯