Pointer Casting后指针算术如何工作?

时间:2016-02-01 17:47:30

标签: c pointers endianness

int main() {
    short int a[4] = {1,1, [3] = 1};
    int *p = (int*)a;

    printf("p: %p  %d \n ", p, *p);
    printf("p+1: %p %d\n", (p +1), *(p+1));
}

为什么* p = 65537且*(p + 1)= 65536?

1 个答案:

答案 0 :(得分:-1)

好吧,要理解为什么*P是65537而*(p+1)是65536,让我们来看看内存:

00000001 00000000 | 00000001 00000000 | 00000000 00000000 | 00000001 00000000

我用空格分割了一个字节,用一个short int分割了一个字节。现在我们将ptr转换为int*,它现在需要四个字节而不是两个字节:

00000001 00000000 00000001 00000000 | 00000000 00000000 00000001 00000000

如果您将这些二进制文件输入计算器并让它显示十进制表示,那么您就可以获得这些数字。 (但是那个小端,所以最右边的字节是你首先输入计算器的big端)