为什么C程序的以下片段给出了这个输出?

时间:2016-02-23 11:25:56

标签: c pointers

#include <stdio.h>
int main(void) 
 {
  char c[] = "Gate2011";
  char *p = c;
  printf("%s", p+p[3]-p[1]);
  return 0;
}

输出: 2011

为什么要提供此输出?我尝试了不同的组合,它总是给垃圾。

2 个答案:

答案 0 :(得分:3)

因为p[3] = 'e' = 101p[1] = 'a' = 97

101 - 97 = 4

p + 4 =&#34; 2001&#34;的地址in&#34; Gate2001&#34;

解释为字符串......你去。

我也不理解downvotes :(

答案 1 :(得分:0)

P + P [3] -P [1]
for p是字符串&#34; Gate2011&#34;的Ram地址。 ;对于P [3] - p [1]实际上会实现对字符串的访问偏移,即&#39; e&#39; - &#39; a&#39; = 4 你可以算一下它现在的位置。