2014-01-17 73 views
0

我正在讀一本關於C和GNU的書,但它引用了32位處理器上的代碼。我已經知道EIP實際上是64位的RIP,但是當我處理指針時,它仍然給我樹木...有沒有做過一些我不知道的差異?謝謝 - 指針碼 -C語言在x64處理器上的表現如何不同

int j = 10; 
int *pointr; 
pointr = j; 

printf("in j has an adress of %p", pointr); 
+5

C是源語言,而不是一個指令集架構。其語法獨立於任何處理器。 – RouteMapper

+1

這個問題或許應該改寫爲「我在做什麼指針錯了?」或者「x64處理器上的C語法如何不同?」取消所有對另一方的引用,以及決定的內容。 –

+0

男人,當任何人問一個基本的編程問題時,所有答案的數量都會立刻出現 –

回答

4

你的代碼應該是

pointr = &j; 

隨着pointr = j;你的指針分配的j10值。

0

未使用內聯彙編時更改的一個主要事件是指針大小。如果你的程序沒有明確地依賴於指針大小,你通常應該沒問題。有關64位C/C++代碼問題的詳細列表,請參閱http://www.viva64.com/en/a/0065/

在代碼中,你應該使用:

pointr = &j; 
1

它不是。

除了某些大小的變量(esp指針)可能不同。
這應該幾乎從來沒有問題,但如果它, 你應該使用sizeof獲得大小,如果他們有任何問題。

但你的代碼也許應該採取j 無論的地址在64位或32位

int j = 10; int *pointr; 
pointr = &j; 
printf("in j has an adress of %p", pointr); 
3

C的語法是在所有處理器相同。

不同的本地類型的大小有所不同。有什麼是允許的規則,但也有很多創造性的範圍。特別是,指針在64位機器上長8個字節,而不是32位機器上的4個字節。大多數32位編譯器將intlong都視爲32位類型;大多數64位編譯器將long視爲64位類型,但值得注意的例外是Windows 64,其中long仍爲32位類型。

請注意,你的代碼應該是:

int j = 10; 
int *pointr = &j; 
printf("int j has an address of %p\n", pointr); 
相關問題