我正在讀一本關於C和GNU的書,但它引用了32位處理器上的代碼。我已經知道EIP實際上是64位的RIP,但是當我處理指針時,它仍然給我樹木...有沒有做過一些我不知道的差異?謝謝 - 指針碼 -C語言在x64處理器上的表現如何不同
int j = 10;
int *pointr;
pointr = j;
printf("in j has an adress of %p", pointr);
我正在讀一本關於C和GNU的書,但它引用了32位處理器上的代碼。我已經知道EIP實際上是64位的RIP,但是當我處理指針時,它仍然給我樹木...有沒有做過一些我不知道的差異?謝謝 - 指針碼 -C語言在x64處理器上的表現如何不同
int j = 10;
int *pointr;
pointr = j;
printf("in j has an adress of %p", pointr);
你的代碼應該是
pointr = &j;
隨着pointr = j;
你的指針分配的j
即10
值。
未使用內聯彙編時更改的一個主要事件是指針大小。如果你的程序沒有明確地依賴於指針大小,你通常應該沒問題。有關64位C/C++代碼問題的詳細列表,請參閱http://www.viva64.com/en/a/0065/。
在代碼中,你應該使用:
pointr = &j;
它不是。
除了某些大小的變量(esp指針)可能不同。
這應該幾乎從來沒有問題,但如果它, 你應該使用sizeof
獲得大小,如果他們有任何問題。
但你的代碼也許應該採取j
無論的地址在64位或32位
int j = 10; int *pointr;
pointr = &j;
printf("in j has an adress of %p", pointr);
C的語法是在所有處理器相同。
不同的本地類型的大小有所不同。有什麼是允許的規則,但也有很多創造性的範圍。特別是,指針在64位機器上長8個字節,而不是32位機器上的4個字節。大多數32位編譯器將int
和long
都視爲32位類型;大多數64位編譯器將long
視爲64位類型,但值得注意的例外是Windows 64,其中long
仍爲32位類型。
請注意,你的代碼應該是:
int j = 10;
int *pointr = &j;
printf("int j has an address of %p\n", pointr);
C是源語言,而不是一個指令集架構。其語法獨立於任何處理器。 – RouteMapper
這個問題或許應該改寫爲「我在做什麼指針錯了?」或者「x64處理器上的C語法如何不同?」取消所有對另一方的引用,以及決定的內容。 –
男人,當任何人問一個基本的編程問題時,所有答案的數量都會立刻出現 –