c-索引运算符对任意指针做什么



假设我们有

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: %pnn", ptr);
printf("ptr[0]: %pnn", ptr[0]);
//ptr + 1 vs ptr[1]
printf("ptr + 1: %pnn", ptr + 1);
printf("ptr[1]: %pnn", ptr[1]);
//ptr + 5 vs ptr[5]
printf("ptr + 5: %pnn", ptr + 5);
printf("ptr[5]: %pnn", 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打印非指针内容的警告。

最新更新