我有以下程序。我想知道为什么它在下面的 64 位机器上输出 -4?我的哪个假设出错了?
[Linux ubuntu 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux]
在上面的机器和 gcc 编译器中,默认情况下应该先推送 b,然后再推送。堆栈向下增长。所以 b 应该有更高的地址,而 a 应该有更低的地址。所以结果应该是积极的。但我得到-4。有人可以解释一下吗?
参数是占用堆栈帧中 2 个字节的两个字符。但是我看到差异为 4,而我期望为 1。即使有人说这是因为对齐,那么我想知道具有 2 个字符的结构在 4 个字节处未对齐。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> void CompareAddress(char a, char b) { printf("Differs=%ld\n", (intptr_t )&b - (intptr_t )&a); } int main() { CompareAddress('a','b'); return 0; } /* Differs= -4 */