c++ - 有人可以在从函数返回数组时解释输出的行为吗?
问题描述
代码:
#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 和 -1 在第 8 和第 9 位而不是 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 个元素,因此在不进入未定义行为区域的情况下,您无法真正超越第 4 个元素(第 3 个索引)。
每次执行代码时,您可能会得到不同的值。
推荐阅读
- javascript - 菜鸟问题在这里。句子反转,但保持字符在相同的位置
- php - Laravel:在视图中调用继承的控制器函数
- kubernetes - GKE 节点反关联,但在节点级别不是 kube 资源
- powerbi - Power Bi 比较两个表并获取不匹配条件的值
- java - 使用 ResultSet 从带有 SQL 的 Java DB 获取数据
- java - 关于 Class Not found jsch lib(已解决)
- python - 如何在 QDateTimeEdit 中显示没有显示格式字符串中的日期的日历弹出窗口?
- postgresql - 具有整数值的 Postgresql 更新列
- angular - 是否可以将反应形式的吸气剂保存在单独的文件中
- pandas - Setting groupby nunique to dataframe column