在缓冲区内取消引用

时间:2010-06-06 04:37:42

标签: c

假设我有一个指向包含这些值的缓冲区的字符指针(十六进制):

12 34 56 78 00 00 80 00

我想将最后两个字节修改为short值为42.所以我认为我必须做这样的事情:

(short)*(pointer+6)=42;

编译器没有抱怨,但它没有做我期望它做的事情。有人可以告诉我分配值的正确方法吗?

1 个答案:

答案 0 :(得分:5)

投降到“短”是在作业完成后发生的。你想要的是:

*(short*)(pointer+6) = 42;

顺便提一下,请注意别名问题。在这种情况下你可能没问题,因为字符被假定为能够别名(编辑:我更正了;这个例子打破了严格的别名,除非这个数据的实际类型是“短”)。但一般来说,您应该非常谨慎地将一种指针类型转换为另一种指针类型。谷歌“严格别名”了解更多信息。