【发布时间】:2015-04-18 11:57:15
【问题描述】:
我目前正在参加 CS107 课程,该课程做出以下假设:
sizeof(int) == 4sizeof(short) == 2sizeof(char) == 1- 大字节序
我的教授显示了以下代码:
int arr[5];
((short*)(((char*) (&arr[1])) + 8))[3] = 100;
这是代表arr的20个字节:
|....|....|....|....|....|
我的教授说&arr[1] 点在这里,我同意。
|....|....|....|....|....|
x
我现在明白(char*) 将指针设为 char(1 字节)的宽度,而不是 int(4 字节)的宽度。
我不明白的是+ 8,我的教授在这里指出:
|....|....|....|....|....|
x
但它不应该指向这里吗,因为它的大小是 char(1 字节)的 8 倍?
|....|....|....|....|....|
x
【问题讨论】:
-
你是对的。编写一些代码来打印指针的值,以向您的教授表明您是对的。
-
这一切都取决于
sizeof(int),不一定是4。 -
@BlagovestBuyukliev 我的教授说在上课期间假设
sizeof(int)是4。抱歉,我应该提到这一点。 -
阿列克谢 - 1,教授 - 0。
-
有点相关:这是严格别名违规的经典示例,因此这段代码无论如何都没有任何明确定义的语义。
标签: c casting pointer-arithmetic