Linux編譯警告的解決辦法
refer to:
我們已經知道,指標的值就是指標指向的地址,在32位程式中,指標的值其實是一個32位整數。那可不可以把一個整數當作指標的值直接賦給指標呢?就象下面的語句:
unsigned int a;
TYPE *ptr;//TYPE是int,char或結構型別等等型別。
...
...
a=20345686;
ptr=20345686;//我們的目的是要使指標ptr指向地址20345686(十進位制)
ptr=a;//我們的目的是要使指標ptr指向地址20345686(十進位制)
編譯一下吧。結果發現後面兩條語句全是錯的。那麼我們的目的就不能達到了嗎?不,還有辦法:
unsigned int a;
TYPE *ptr;//TYPE是int,char或結構型別等等型別。
...
...
a=某個數,這個數必須代表一個合法的地址;
ptr=(TYPE*)a;//呵呵,這就可以了。
嚴格說來這裡的(TYPE*)和指標型別轉換中的(TYPE*)還不一樣。這裡的(TYPE*)的意思是把無符號整數a的值當作一個地址來看待。
上面強調了a的值必須代表一個合法的地址,否則的話,在你使用ptr的時候,就會出現非法操作錯誤。