You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将int指针转为char指针后解引用异常,小端序下结果不符求助

问题原因分析

你搞错了后置自增运算符++的行为逻辑。

核心知识点:后置自增的求值顺序

后置自增运算符ptr++的规则是:先返回指针当前的原值,再将指针的地址加1。虽然++的优先级高于*,但后置自增的“返回原值再自增”特性,导致*ptr++的实际执行流程是:

  1. 读取ptr当前指向的内存值(此时指针还未移动)
  2. 将该值赋值给y
  3. 最后把ptr的地址加1,指向内存中的下一个字节

结合你的代码逐步拆解

假设你的系统中int是4字节,变量x=0x2e1f34在小端序内存中的存储顺序是:

内存地址存储值
&x0x34
&x+10x1f
&x+20x2e
&x+30x00

代码执行步骤:

  1. char y = *ptr; → ptr指向&x,取到0x34,输出y=0x34(符合预期)。
  2. y = *ptr++; → 先取ptr当前指向的0x34赋值给y,然后ptr自增到&x+1。所以这次输出还是y=0x34(这就是你觉得异常的原因)。
  3. y = *ptr++; → 此时ptr已经指向&x+1,先取到0x1f赋值给y,然后ptr自增到&x+2。输出y=0x1f(符合预期)。

如何实现“先自增再解引用”

如果想让指针先移动到下一个字节再取值,需要使用前置自增运算符++ptr,对应的代码是:

y = *(++ptr);

这样执行顺序会变成:先将ptr自增到下一个地址,再解引用取值,就能得到你预期的0x1f作为第二个输出。

内容的提问来源于stack exchange,提问作者user9026

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:22:02