c++数组越界不报错,是因为将数组当指针处理吗?

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
-858993460
0
-858993460
没有报错是因为直接将 array[3]当做*(array+3)处理吗?
那为什么array[3],array[4]输出结果相同?

四季花海
浏览 866回答 1
1回答

阿晨1998

没有报错是因为直接将array[3]当做*(array+3)处理吗?可以这么理解。以C++的尿性来看,这样最简单,最快,也方便各种魔幻用法。检测越界这种事应该交给库,或者更高级的语言。那为什么array[3],array[4]输出结果相同?Visual C++ 编译器会在调试模式下把未初始化的内存用0xCC填充。如果输出字符串,就是喜闻乐见的烫烫烫。如果输出int32,就是-858993460。[...new&nbsp;Uint8Array(Int32Array.of(-858993460).buffer)].map(e&nbsp;=>&nbsp;e.toString(16))//&nbsp;<-&nbsp;["cc",&nbsp;"cc",&nbsp;"cc",&nbsp;"cc"]也可以搜索“补码在线计算器”自己验证。
打开App,查看更多内容
随时随地看视频慕课网APP