C++基础int数组输出异常,如何实现356的目标输出?
问题解答:C++数组输出不符合预期的原因及解决方案
咱们先把两个代码的问题拆解清楚,再说说怎么实现你想要的356输出:
第一段代码输出垃圾值的原因
你这段代码里定义了固定大小为3的数组int num[3]{3,5,6};,C数组的索引是从0开始的,合法索引只有0、1、2,对应元素3、5、6。而你尝试访问num[3],这属于数组越界访问——你碰了数组内存范围之外的区域,这在C里是未定义行为,输出的-858993460只是这块内存里的随机垃圾值而已。
另外提一句:你的代码还缺少int main()函数包裹,实际是无法通过编译的,应该是你简化了代码片段~
第二段代码输出内存地址的原因
这段代码里你用int num[]{3,5,6};(省略大小后编译器会自动推断数组长度为3),然后直接cout << num;。在C++中,数组名在多数场景下会被隐式转换成指向数组第一个元素的指针,所以cout输出的是这个指针的内存地址(也就是你看到的004FFC48),而不是数组里的元素内容。
实现输出356的正确方式
要得到数组元素拼接后的356,你需要遍历数组的每个元素并依次输出。这里给你补全完整可编译的代码:
方式1:传统for循环
#include <iostream> #include <string> using namespace std; int main() { int num[]{3, 5, 6}; // 通过sizeof计算数组长度,避免硬编码 for (int i = 0; i < sizeof(num)/sizeof(num[0]); ++i) { cout << num[i]; } cout << endl; // 可选,用于换行 string y; getline(cin, y); return 0; }
方式2:C++11及以上的范围for循环(更简洁)
#include <iostream> #include <string> using namespace std; int main() { int num[]{3, 5, 6}; for (int n : num) { cout << n; } cout << endl; string y; getline(cin, y); return 0; }
这两段代码都会依次输出3、5、6,自然拼接成你想要的356。
内容的提问来源于stack exchange,提问作者Dracep
相关产品推荐
相关产品推荐

