1. 程式人生 > >指標能用立即數直接賦值嗎?

指標能用立即數直接賦值嗎?

學習的過程中產生了這個疑問:指標變數本身是一個地址,那麼能直接用地址的值賦給指標嗎?

答案是可以,只要加一個型別強制轉換,比如定義了 int * p;  可以接著 p=(int*) 0x04; 

此時我又想,那麼可以把一個存著地址的變數直接賦給指標嗎?

直接賦當然不可以,那麼強制型別轉換呢,於是有了以下程式碼:

  1. int temp=0x02;

  2. char * p;

  3. 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