C语言中的指针数组?

6

指针确实是一个难点,但我遇到了这段代码,就是不知道p[-1]是什么意思:

#include <stdio.h> 
int main(void) { 
    int t[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, *p = t; 

    p += 2; 
    p += p[-1]; 
    printf("%d",*p); 
    return 0; 
}

首先,您将2添加到指针p中,这样它将指向比以前多2个地址(因此现在它指向t[2]的地址)。现在,您访问它所指向的地址之前的一个地址,导致它指向包含“2”(或t[1])的地址。 - moffeltje
2个回答

9
任何时候在C语言中看到类似于a[b]的表达式,你可以理解为*(a + b)
所以,这只是“p指向的元素之前的内容”。
由于pt+2处,p[-1]指的是t[2+(-1)]t[1]

1
p += p[-1]; 

可以写成:

可以写成

p = p + *(p-1);

在那个时刻,p 指向数组的第三个元素(值为 3),*(p-1)2

因此,它等价于

p = p+2;

打印*p将打印5

太棒了,谢谢!那真是太快了!现在我感觉有点蠢!但是非常感谢你们详细的解释! - SplineO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接