#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
答案 0 :(得分:1)
*ip
导致undefined behaviour。您不能使用int
类型的左值来访问声明为short
的内存。
由于行为未定义,程序的整个输出都没有意义,因此您不必担心为什么会发生任何特定输出。