指標能用立即數直接賦值嗎?
阿新 • • 發佈:2018-12-10
學習的過程中產生了這個疑問:指標變數本身是一個地址,那麼能直接用地址的值賦給指標嗎?
答案是可以,只要加一個型別強制轉換,比如定義了 int * p; 可以接著 p=(int*) 0x04;
此時我又想,那麼可以把一個存著地址的變數直接賦給指標嗎?
直接賦當然不可以,那麼強制型別轉換呢,於是有了以下程式碼:
-
int temp=0x02;
-
char * p;
-
p=(char*)temp;
這樣可以嗎?
可以,但是編譯後警告:cast to pointer from integer of different size
為了弄懂為什麼有如此警告,當然各種百度、谷歌,最後弄懂了:
我的電腦是64位的,也就是指標的長度是64位的,而編譯器對 int 的編譯是32位,所以會警告大小不一致(integer of different size)
解決辦法有兩個:
(1)弄清楚你的處理器是多少位定址,從而定義大小一致的變數,比如本例應該定義 long long int temp;
(2)使用 intptr_t 型別,intptr_t 是為指標量身定做的,也就是說該型別會隨處理器的位數不同而不同,比如32位平臺上是#define int intptr_t ,而64位平臺是#define long long int intptr_t