以下程序如何处理指针操作

Reg*_*ser 4 c string pointers

可能重复:
来自GATE论文的c程序

这是一个正在运行的程序

#include<stdio.h>
int main ()
{
char c[]="GATE2011";
char *p=c;
printf("%s",p+p[3]-p[1]);
}
Run Code Online (Sandbox Code Playgroud)

输出是

2011
Run Code Online (Sandbox Code Playgroud)

现在问题是我无法理解p + p [3] -p [1]的操作是什么指向的?

我的理解是当我宣布某些事情时

char c[]="GATE2011"
Run Code Online (Sandbox Code Playgroud)

然后c是指向字符串常量的指针,字符串以G开头.在下一行中*p=c; ,指针p指向c指向的相同地址.那么上面的算法如何工作呢?

Rod*_*ddy 8

p[3]是'E',p[1]是'A'.ASCII代码A和E之间的差异是4,因此p+p[3]-p[1]相当于p+4,相反,它等同&p[4]于char数组中的'2'字符.

但是,任何发现在生产代码中写这种东西的人都会被枪杀.