为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
四季花海 2018-09-24 18:07:48
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"]

也可以搜索“补码在线计算器”自己验证。


查看完整回答
反对 回复 2018-09-24
  • 1 回答
  • 0 关注
  • 855 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信