C指针输出不清楚

时间:2017-10-15 21:50:50

标签: c pointers

 #include <stdio.h>
 int main(void)
 {
   short x[12];
   unsigned char *cp;
   short *sp;
   int *ip;
   int i;
   for (i = 0; i < 12; i++) {
     x[i] = i + 1;
   }
   cp = (unsigned char *) x;
   sp = (short *) x;
   ip = (int *) x;
   printf("1)*cp = %x\n",*cp);
   printf("A)*ip = %x\n",*ip);
   ip = ip + 2;
   printf("B)*ip = %x\n",*ip);
   cp[1]--;
   printf("C) cp[1] = %d\n", cp[1]);
   printf("D)*sp = %d\n",*sp);
   sp[3] = sp[3] + 257;
   printf("E) cp[6] = %x\n", cp[6]);
   printf("F) cp[7] = %x\n", cp[7]);
 return 0;
 }

此代码生成以下输出

 1)*cp = 1
 A)*ip = 20001
 B)*ip = 60005
 C) cp[1] = 255
 D)*sp = -255
 E) cp[6] = 5
 F) cp[7] = 1

我确定这背后的逻辑。 unsigned char是否需要输出。我不知道为什么20001是由整数指针ip输出的,以及cp [6]是如何输出5

1 个答案:

答案 0 :(得分:1)

由于违反严格别名规则,

*ip导致undefined behaviour。您不能使用int类型的左值来访问声明为short的内存。

由于行为未定义,程序的整个输出都没有意义,因此您不必担心为什么会发生任何特定输出。