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?

最佳答案

好,要了解为什么*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末尾)

关于c - 指针转换后指针算术如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35137027/

10-13 07:31