什么是(char *)((int *)4 -1)?

时间:2019-06-09 17:53:20

标签: c++ pointers

很抱歉,我要求你们为我的家庭作业提供帮助,但是我不是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);

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

什么都没有。几乎可以肯定这会使您的程序崩溃,因为从地址中读取任何内容(可能是0)都是不确定的行为。

首先,您创建(int*)4。然后,您从中减去1,这会移动指针(指针只是一个数字,但是指针的类型定义了当您向其中添加/减去某些内容时数字移动了多少,因此(int*)4 - 14 - sizeof(int) * 1 = 0 sizeof(int) = 4,可能)。