int指標強制轉換成short指標安全嗎?

2021-04-13 06:48:02 字數 487 閱讀 9588

void func1(short* p)

void func2()

函式func1中的列印結果會是什麼呢?

答案是不一定。在大部分的平台中x的值可能為1,但在有些平台中x的可能為0,這是為什麼呢?

原來,在記憶體中乙個int型別的變數占用四個位元組,在有些系統中會把低位值存放在高位址記憶體中,把高位值存放在低位址記憶體中,當出現這種情況時,如果做強制指標型別轉換,由於是做指標型別轉換,指標指向的位址總是低位址的位置,如果x值小於或等於0xffff,則低位址位置的值是為0,所以做指標型別強制轉換後得到的值為0。

那該怎麼辦呢?如果x值小於或等於0xffff,只要不做強制指標型別轉換就可以了,如下方法:

void func2()

反過來,如果把short型別指標轉換成int型別指標會是怎樣呢?這個將會產生更嚴重的後果――指標越界。

在c語言中,指標的強制型別轉換是最不安全的,特別是在嵌入式開發中應當要更為嚴格地約束自己,在做這類轉換時要特別地小心。

int 轉換成byte 數字

byte是1個位元組 所以 位元組型,佔1 位元組,表示8 位正整數,範圍0 255 int是4個位元組 而把int轉換成byte會擷取最後乙個位元組 比如你說的135 轉為2進製應該有4個位元組 然後僅僅要最後乙個位元組 最後乙個位元組的第一位被作為符號位135轉換2進製後為10000111 然後...

數字String轉換成int

最近在將數字字串轉int時,經常忘記integer.parseint 和這個integer.valueof 看下面 1.string轉int int num integer.valueof 12 int num2 integer.parseint 12 兩個方法的區別 integer.valueof...

ArrayList轉換成int 陣列

1.為什麼有這個問題?因為arraylist的toarray無法對int生效 2.為什麼無法對int生效?因為int不是物件,所以不是object的子類,只是基本的資料型別 3.那麼如何轉換成int 陣列 可以直接轉為integer 陣列。list list newarraylist int siz...