如何解决有人可以从函数返回数组时解释输出的行为吗?
代码:
#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?
注意:请避免提出更正代码的建议(这只是测试代码),仅提供输出原因。
解决方法
我编译并执行了您的代码。
这是输出:
$ ./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个元素,因此如果不输入 Undefined Behaviour (未定义行为)区域,您就无法真正超越第4个元素(第3个索引)。
每次执行代码时,您可能会获得不同的值。
,仅使用四个值初始化了输入数组:10、20、30、40。“ for”循环迭代10次。在C ++中,索引运算符会在找到的任何位置愉快地返回值,但是在这种情况下,只有前四个值有效;以下所有值均无效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。