#include<stdio.h>
int main()
{
int i, j;
int *pi,*pj;
pi=&i;
pj=&j;
printf("pi-pj=%d\n",pi-pj);
return 0;
}
我在不同的编译器上尝试了此代码,但是每次获得相同的结果时,谁能帮助我了解为什么它是相同的?
Ouput:
pi -pj = 3
我很困惑,因为通常会连续分配内存。因此,如果说我们的系统堆栈正在向下增长,并且我们有
&i = 0xA
,那么j(&j) = 0x6
的地址(因为整数是4个字节)。现在,当我们打印这两个int
指针值之间的差异时,输出应为"1"
。但是它以"3"
的形式出现。这是为什么? 最佳答案
我无法复制您的经验。在Linux x86上使用gcc
:
[wally@lenovotower ~]$ cat t.c
#include<stdio.h>
int main()
{
int i, j;
int *pi,*pj;
pi=&i;
pj=&j;
printf("pi-pj=%d\n",pi-pj);
return 0;
}
[wally@lenovotower ~]$ gcc -o t t.c
[wally@lenovotower ~]$ ./t
pi-pj=1
[wally@lenovotower ~]$
这意味着
i
和j
是相邻的。指针减法返回指针之间的项目数,而不是地址差。为了获得结果,之间必须有两个填充值。我无法解释那是怎么回事。关于c - 此C代码的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6515278/