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

2021-08-28 07:00:13 字數 705 閱讀 7805

答案是可以,只要加乙個型別強制轉換,比如定義了 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 

**:

深入理解立即數與直接定址

1 匯程式設計序把任何不以0x開頭的數字當做十進位制整數 2 組合語言包含兩種型別的語句,分別對應兩種型別的位模式。助記符語句對應指令位模式,偽操作對應資料位模式!3 block 命令後面跟乙個常量,然後產生這個常量位元組的儲存空間 block 2 命令,生成乙個2位元組的儲存塊 4 word命令也...

關於立即數

在彙編時,我們常會用到立即數。但是立即數是有條件限定的 當乙個數小於255不用判斷,它是立即數。當大於255時 把資料轉換成二進位制形式,從低位到高位寫成4位 1組的形式。if count of 1 8 isnotimmediate else 解決老是需要判斷的方案 我們在arm彙編中如何規避立即數...

直接定址 間接定址 立即定址

一 前言 直接定址 間接定址 立即定址,只是cpu在通過匯流排與記憶體互動時的不同互動方法,而產生的三種概念詞!對於這些定址方式,很多人沒有聽說過,但是對於學習彙編的同學來說,非常熟悉,很多書中都有提到過這幾種定址方式,但是沒有細說,這裡來給大家詳細介紹一下這三種定址方式的不同體現在 二 直接定址 ...