很抱歉,我要求你们为我的家庭作业提供帮助,但是我不是C ++程序员或其他任何人,这给我带来了困难。
考虑此地址(上)/值(下)表
0 1 2 3 4 5 6 7 8 9 10 11 12 13
23 14 62 111 34 2 43 6 12 94 41 2 55 104
这将打印什么?
char *charPointer = (char*)((int*)4 -1);
printf("%d", *charPointer);
有人可以解释一下吗?
答案 0 :(得分:1)
什么都没有。几乎可以肯定这会使您的程序崩溃,因为从地址中读取任何内容(可能是0)都是不确定的行为。
首先,您创建(int*)4
。然后,您从中减去1,这会移动指针(指针只是一个数字,但是指针的类型定义了当您向其中添加/减去某些内容时数字移动了多少,因此(int*)4 - 1
为4 - sizeof(int) * 1 = 0
sizeof(int) = 4
,可能)。