索引运算符对任意指针做了什么?
What does the index operator do to arbitrary pointers?
假设我们有
int x = 4;
int *ptr = &x;
我希望 ptr[0]
会是 ptr
,ptr[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
打印非指针内容的警告。
假设我们有
int x = 4;
int *ptr = &x;
我希望 ptr[0]
会是 ptr
,ptr[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
打印非指针内容的警告。