繁体   English   中英

此 C 代码的 Output

[英]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 ~]$ 

这意味着ij是相邻的。 指针减法返回指针之间的项目数,而不是地址差。 为了得到你的结果,必须有两个项目之间的填充。 我无法解释这怎么可能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM