#include <stdio.h> int main() { int a[3]= {0,2,3},*s,*p; s=a; p=&a[2]; printf("%p\n%p\n",p,s); printf("%x",p-s); return 0; }
两个地址差了8个字节啊为什么打印出来是2呢
收起
在 C 语言中,当对指针进行减法运算时,结果并不是两个指针所指向的地址的字节差值,而是两个指针之间的元素个数差值。地址差值:p的地址减去s的地址,从字节角度看可能是 8 个字节(假设int为 4 字节,a[2]与a[0]相差 2 个int元素,即 8 字节)。但是当进行p - s运算时,C 语言按照元素个数来计算。p指向a[2],s指向a[0],它们之间相差 2 个int元素。所以p - s的结果是2,而不是字节差值。
报告相同问题?