代碼:我可以投這樣的指針嗎?
unsigned char array_add[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
...
if ((*((uint32_t*)array_add)!=0)||(*((uint32_t*)array_add+1)!=0))
{
...
}
我要檢查,如果數組是全零。所以自然我想到了將一個數組的地址(它也恰好是第一個成員的地址)轉換爲unsigned int 32類型,所以我只需要這樣做兩次,因爲它是一個64位,8個字節陣列。問題是,它已成功編譯,但程序每次都在這裏崩潰。
我在一個8位微控制器cortex-M0上運行我的程序。
我怎麼了?
停止寫這樣的代碼!這看起來像是在呼喚麻煩;考慮到強制轉換未定義的行爲。你爲什麼不使用'uint32_t [2]? – Olaf
而Cortex-M0不是8位的CPU! – Olaf
爲什麼不使用指針? unsigned char * pt = array_add; ((*(pt)!= 0)||(*(pt + 1)!= 0)) – dante