为何C语言代码未输出预期结果10 25 36 42?
问题解答
问题1:为何未显示预期输出?
- 循环条件错误引发数组越界访问:
sizeof(array)/sizeof(int)计算结果为4,循环条件i < 4会让i从-1一直迭代到3,此时循环体中array[i+1]会访问array[4],超出了数组的合法索引范围(数组仅支持0-3的索引)。 - 数组越界属于C语言中的未定义行为,会输出随机垃圾值,最终输出会比预期多一个无效内容,破坏了
10 25 36 42的预期结果。
问题2:为何这段代码没有输出?
- 代码本身具备输出逻辑,若未看到输出,大概率是数组越界触发了程序崩溃(不同编译器、运行环境对未定义行为的处理存在差异),导致程序在完成打印前就终止,从而无输出或输出不完整。
- 极少数情况下,若运行环境未及时刷新输出缓冲区,也可能导致输出未显示,但核心诱因仍是数组越界引发的未定义行为。
修复方案
调整循环条件或变量起始值,确保仅访问数组的合法索引:
#include <stdio.h> int main() { int i; int array[4] = {10, 25, 36, 42}; int size = sizeof(array) / sizeof(int); for (i = 0; i < size; i++) { printf("%d ", array[i]); } return 0; }
修改后可准确遍历数组的4个元素,输出预期结果。
内容的提问来源于stack exchange,提问作者aleena george
相关产品推荐
相关产品推荐

