-2
我的開發環境包括了ARM OMAP Sitata的G ++交叉編譯器。我發現簡單的指針算術的一個不尋常的細微差別,加入一個unsigned int到一個unsigned int *時,如下:將unsigned int類型到無符號整型*
unsigned int* dst_base_addr;
unsigned int* dst_addr;
unsigned int dst_offset;
只需嘗試添加的(無符號整數)到(無符號整數*)
dst_addr = dst_base_addr + dst_offset;
以上不被解釋爲一個可能天真地認爲,但實際上產生以下等效的結果
dst_addr = (unsigned int*)((unsigned int)dst_base_addr + (dst_offset << 2));
補救的方法當然是做正確的類型轉換爲如下
dst_addr = (unsigned int*)((unsigned int)dst_base_addr + dst_offset);
問題:爲什麼在這種情況下甚至需要進行正確的類型轉換?
爲了避免錯誤。 – 2017-02-17 14:42:35
'dst_addr = dst_base_addr + dst_offset;'不爲dst_addr分配內存不好。 –
'DST_ADDR =(unsigned int的*)((unsigned int類型)dst_base_addr + DST_OFFSET);'但是這是錯誤的,指針運算不一樣, – SingerOfTheFall