[英]Output of this C code
#include<stdio.h>
int main()
{
int i, j;
int *pi,*pj;
pi=&i;
pj=&j;
printf("pi-pj=%d\n",pi-pj);
return 0;
}
我在不同的编译器上尝试了这段代码,但每次我得到相同的结果,谁能帮我理解为什么它是一样的?
输出:
pi -pj = 3
我很困惑,因为 memory 通常会被连续分配。 因此,假设我们的系统堆栈向下增长并且我们有&i = 0xA
,那么j(&j) = 0x6
的地址(因为整数是 4 个字节)。 现在,当我们打印这两个int
指针值之间的差异时, output 应该是"1"
。 但它以"3"
的形式出现。 这是为什么?
我无法复制您的经验。 在gcc
上使用 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
是相邻的。 指针减法返回指针之间的项目数,而不是地址差。 为了得到你的结果,必须有两个项目之间的填充。 我无法解释这怎么可能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.