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