int array[ 3 ] = { 1, 2, 3 } ;std::cout << array[3] << std::endl;std::cout << array[4] << std::endl;std::cout << array[100] << std::endl;上面的代码输出为0-858993460-8589934600-858993460没有报错是因为直接将 array[3]当做*(array+3)处理吗?那为什么array[3],array[4]输出结果相同?
1 回答
阿晨1998
没有报错是因为直接将
那为什么
TA贡献2037条经验 获得超6个赞
没有报错是因为直接将array[3]
当做*(array+3)
处理吗?
可以这么理解。以C++的尿性来看,这样最简单,最快,也方便各种魔幻用法。检测越界这种事应该交给库,或者更高级的语言。
那为什么array[3]
,array[4]
输出结果相同?
Visual C++ 编译器会在调试模式下把未初始化的内存用0xCC填充。如果输出字符串,就是喜闻乐见的烫烫烫。如果输出int32,就是-858993460。
[...new Uint8Array(Int32Array.of(-858993460).buffer)].map(e => e.toString(16))// <- ["cc", "cc", "cc", "cc"]
也可以搜索“补码在线计算器”自己验证。
- 1 回答
- 0 关注
- 855 浏览
添加回答
举报
0/150
提交
取消