当我打印变量地址之间的差异时,我无法解决为什么我找到差异
这是代码:
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分配给相似的差异时,为什么它们之间存在差异
请告诉我 .
a并且c是指针,因此获取指针的不同会返回它们之间的元素数量. e和f为整数(其值是简单地的地址b和d); 取整数的差异实际上只是一个减法,所以它返回字节数.
注意(1):由于两个指针的差异未指向同一数组的元素而导致的行为未定义.
注意(2):为地址分配所产生的行为int是实现定义的.
注(3):两个指针的区别在于类型ptrdiff_t,其大小是实现定义的.因此,将其分配给a long也是实现定义的.
注意(4):在同一行(例如int *a,b = 5,e = 0;)上混合指针和非指针的声明被认为是非常糟糕的做法,因为它令人难以置信的混乱!
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |