【发布时间】:2020-08-30 09:17:28
【问题描述】:
代码:
#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,而第 8 位和第 9 位的值为 -1 而不是 0?
注意:请避免建议更正代码(这只是一个测试代码),只提供输出的原因。
【问题讨论】:
-
这些只是一些垃圾值,因为你要越界了。
-
从一个只有四个元素的数组中打印十个元素你怎么看?那是一种未定义的行为,即垃圾。
-
ArrayReturn()返回一个指向正好有四个元素的数组的第一个元素的指针。它实际上并没有返回一个数组。使用返回的指针main()尝试打印该数组的十个元素,该数组已知只有四个元素。因此行为是未定义的。打印垃圾值是未定义行为的常见症状。在你的情况下,你得到的三个零值也只是偶然的。 -
@Peter 谢谢。一个后续问题。每次我执行程序时,它应该抛出一个不同的垃圾值,但我在这里得到了常量值。为什么?