可能重复:
来自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指向的相同地址.那么上面的算法如何工作呢?
p[3]是'E',p[1]是'A'.ASCII代码A和E之间的差异是4,因此p+p[3]-p[1]相当于p+4,相反,它等同&p[4]于char数组中的'2'字符.
但是,任何发现在生产代码中写这种东西的人都会被枪杀.
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |