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 關注
- 902 瀏覽
添加回答
舉報
0/150
提交
取消