假设我有一个 char 指针指向包含这些值(十六进制)的缓冲区:
12 34 56 78 00 00 80 00
我想将最后两个字节修改为 short
值 42。所以我想我必须这样做:
(short)*(pointer+6)=42;
编译器不会提示,但它不会做我期望它做的事情。有人可以告诉我正确的赋值方法吗?
最佳答案
转换为“short”是在分配之后发生的。你想要的是:
*(short*)(pointer+6) = 42;
顺便说一句,请注意别名问题。在这种情况下,您可能没问题,因为假定字符能够对任何内容进行别名(编辑:我已纠正;此示例打破了严格的别名,除非该数据的实际类型是“短”)。但一般来说,您应该非常警惕将一种指针类型转换为另一种指针类型的情况。 Google“严格别名”以获取更多信息。
关于c - 在缓冲区内取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2983103/