c语言那些诡异

1:地址运算

int a[2];
printf(“%d—%d—%d”, &a[0], &a[1], &a[1]-&a[0]);

输出:1606416464—1606416468—1

解释:差值的确是4,但是同类型指针相减的计算法则是 :算数差值/类型长度,对比下面的代码可能就了解的更清晰一点了

int i = (int)(&a[0]);
int j = (int)(&a[1]);
printf(“%d—-%d—-%d\n”, i, j, j-i);

指针移动一位:

int i = 1;
int *p = &i+1;
printf(“%d—-%d\n”, &i, p);

输出:1606416460—-1606416464,

看完上面,这个也就好理解了:

int a[5];
int *p = &a + 1;
printf(“%d—-%d\n”, &a, p);

输出:1606416448—-1606416468