调试指针算术

Tot*_*tie 0 c pointers

当我打印变量地址之间的差异时,我无法解决为什么我找到差异

这是代码:

int main()
{

        int *a,b = 5,e = 0;
        int *c,d = 10,f = 0;
        long t1,t2;
        a = &b;
        c = &d;
        e = &b;
        f = &d;
        t1 = e - f;
        t2 = a - c;
       printf("\n Address of b using a: %x \t %d using e : %x \t %d value of b : %d",a,a,e,e,b);
       printf("\n Address of d using c: %x \t %d using f : %x \t %d value of d : %d",c,c,f,f,d);
       printf("\n Value of t1 : %d",t1);
       printf("\n Value of t2 : %d \n",t2);
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

 Address of b using a: bf9e9384   -1080126588 using e : bf9e9384  -1080126588 value of b: 5

 Address of d using c: bf9e9380   -1080126592 using f : bf9e9380  -1080126592 value of d: 10


 **Value of t1 : 4
 Value of t2 : 1**
Run Code Online (Sandbox Code Playgroud)

当t1和t2分配给相似的差异时,为什么它们之间存在差异

请告诉我 .

Oli*_*rth 8

a并且c是指针,因此获取指针的不同会返回它们之间的元素数量. ef为整数(其值是简单地的地址bd); 取整数的差异实际上只是一个减法,所以它返回字节数.

注意(1):由于两个指针的差异未指向同一数组的元素而导致的行为未定义.

注意(2):为地址分配所产生的行为int实现定义的.

注(3):两个指针的区别在于类型ptrdiff_t,其大小是实现定义的.因此,将其分配给a long也是实现定义的.

注意(4):在同一行(例如int *a,b = 5,e = 0;)上混合指针和非指针的声明被认为是非常糟糕的做法,因为它令人难以置信的混乱!