x64 处理器上的 C 语法有何不同



我正在读一本关于C和GNU的书,但它引用了32位处理器上的代码。我已经发现 EIP 实际上是 64 位的 RIP,但是当我处理指针时,它一直给我带来麻烦......是否还有其他我不知道的差异???谢谢 - 指针代码 -

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

你的代码应该是

pointr = &j;

使用pointr = j;您将j的值分配给指针,即10指针。

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 %pn", pointr);

不是。

除了某些大小的变量(尤其是指针)可能不同。
这几乎无关紧要,但如果确实如此,如果它们很重要,您应该使用sizeof来获取尺寸。

但是,您的代码可能应该采用j的地址无论是 64 位还是 32 位

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

不使用内联程序集时更改的一个主要内容是指针大小。如果您的程序不明确取决于指针大小,则通常应该没问题。

有关 64 位 C/C++ 代码问题的详细列表,请参阅 http://www.viva64.com/en/a/0065/。

在代码中,应使用:

pointr = &j;

最新更新