2014-01-10 35 views
1

那麼,我很抱歉。我認爲這個問題已經在其他地方得到解答,但我找不到解決方案。 我有一個int類型的變量和一個if語句在C中,我不知道這個語句檢查什麼。If-Statement在C內存地址

int a; 
if(a==0x6634522) 
{ 
    //do some stuff 
} 

我真的很抱歉,如果這已經回答了其他地方..

+1

檢查a的內容,而不是a的地址。 – stark

+2

並且由於您在檢查其值之前沒有設置'a'(* ducks *) – cHao

+0

這就是說...它不檢查內容...並且0x6634522不是實數整數 – user241221

回答

4

a==0x6634522檢查a是否等效於十六進制0x6634522(6634522) = (107169058) ))或沒有。它正在檢查存儲在a中的值,而不是a&a)的地址。

3

它只是檢查a是否與十六進制數字6634522相同。無論何時將0x放在整數常量前面,C都會將其解釋爲十六進制數字。

3

if語句無非是一個測試,以確定未初始化的變量a是否具有十六進制整數值0x6634522。這是不可能的。您的代碼示例等價於:

int a; 
if(a==107169058) 
{ 
    //do some stuff 
} 

...因爲0x6634522在十六進制(基數16)表示法是在十進制(基體10)表示法107169058

確實,分配給指針變量的內存地址通常使用十六進制數來分配,但這反映了所採用的歷史慣例,因爲內存地址空間幾乎總是在兩個冪和十六進制表示法的地址範圍內提供更緊湊的表示。但是在C中沒有要求對數字或指針值使用十進制,十六進制甚至八進制數字。

1

如果a等於107169058它做了一些東西,但由於a尚未初始化,它不會做任何東西。

+0

@ChrisW你是對的,謝謝。 – HAL9000