索引运算符对任意指针做了什么?

What does the index operator do to arbitrary pointers?

假设我们有

int x = 4;
int *ptr = &x;

我希望 ptr[0] 会是 ptrptr[1] 会是 ptr + 1,等等。但是,发生了完全不同的事情。我运行

#include <stdio.h>

int main()
{
    int x = 4;
    int* ptr;
    ptr = &x;

    //ptr vs ptr[0]
    printf("ptr: %p\n\n", ptr);
    printf("ptr[0]: %p\n\n", ptr[0]);

    //ptr + 1 vs ptr[1]
    printf("ptr + 1: %p\n\n", ptr + 1);
    printf("ptr[1]: %p\n\n", ptr[1]);

    //ptr + 5 vs ptr[5]
    printf("ptr + 5: %p\n\n", ptr + 5);
    printf("ptr[5]: %p\n\n", ptr[5]);
}

结果是

ptr: 0115FBF4

ptr[0]: 00000004

ptr + 1: 0115FBF8

ptr[1]: CCCCCCCC

ptr + 5: 0115FC08

ptr[5]: 00000001

ptr[0]*(ptr + 0)ptr[1]*(ptr + 1),等等。索引计算偏移量 和取消引用 。您应该已经收到有关使用 %p 打印非指针内容的警告。