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]當(dāng)做*(array+3)處理嗎?那為什么array[3],array[4]輸出結(jié)果相同?
1 回答

阿晨1998
沒有報錯是因為直接將
那為什么
TA貢獻(xiàn)2037條經(jīng)驗 獲得超6個贊
沒有報錯是因為直接將array[3]
當(dāng)做*(array+3)
處理嗎?
可以這么理解。以C++的尿性來看,這樣最簡單,最快,也方便各種魔幻用法。檢測越界這種事應(yīng)該交給庫,或者更高級的語言。
那為什么array[3]
,array[4]
輸出結(jié)果相同?
Visual C++ 編譯器會在調(diào)試模式下把未初始化的內(nèi)存用0xCC填充。如果輸出字符串,就是喜聞樂見的燙燙燙。如果輸出int32,就是-858993460。
[...new Uint8Array(Int32Array.of(-858993460).buffer)].map(e => e.toString(16))// <- ["cc", "cc", "cc", "cc"]
也可以搜索“補碼在線計算器”自己驗證。
- 1 回答
- 0 關(guān)注
- 896 瀏覽
添加回答
舉報
0/150
提交
取消