假设我有一个指向包含这些值的缓冲区的字符指针(十六进制):
12 34 56 78 00 00 80 00
我想将最后两个字节修改为short
值为42.所以我认为我必须做这样的事情:
(short)*(pointer+6)=42;
编译器没有抱怨,但它没有做我期望它做的事情。有人可以告诉我分配值的正确方法吗?
答案 0 :(得分:5)
投降到“短”是在作业完成后发生的。你想要的是:
*(short*)(pointer+6) = 42;
顺便提一下,请注意别名问题。在这种情况下你可能没问题,因为字符被假定为能够别名(编辑:我更正了;这个例子打破了严格的别名,除非这个数据的实际类型是“短”)。但一般来说,您应该非常谨慎地将一种指针类型转换为另一种指针类型。谷歌“严格别名”了解更多信息。