在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  C++/ c++數(shù)組越界不報錯,是因為將數(shù)組當指針處理嗎?

c++數(shù)組越界不報錯,是因為將數(shù)組當指針處理嗎?

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]輸出結(jié)果相同?

回答
編輯回答
墨沫

沒有報錯是因為直接將array[3]當做*(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"]

也可以搜索“補碼在線計算器”自己驗證。

2018年1月29日 11:33
編輯回答
傻丟丟

個人看法:

編譯器不檢測越界錯誤,
只有運行時候訪問到了系統(tǒng)的違法地址,系統(tǒng)會拋給程序錯誤,程序繼續(xù)上推

2017年11月16日 09:20