yymiaoxin2010 2017-11-22 17:17 采纳率: 72.7%
浏览 974
已采纳

vs十六进制数相减为什么不对啊

iCount 形参=4;它是通过pText-Begin-5得出来的。那么问题来了 pText等于0x012ca07a,pBegin等于0x012ca070,按理来说是a-1等于9啊 ,为什么会等于4?
图片说明图片说明

  • 写回答

1条回答 默认 最新

  • qq_40774221 2017-11-22 22:34
    关注

    对于编译器而言,指针只有同类型才能相减,同类型的指针相减的结果就是 2个指针变量指向的地址数值相减的结果 再去除以指向的对象类型大小
    你的这个问题 指向的对象类型wchar_t(2字节的宽字符) wchar_t* pText 和 wchar_t*pBegin. pText - pBegin 对于编译而已他会解释
    为取pText的指向地址数值0x012ca07a 取pBegin指向地址的数值0x012ca070 相减在除指向的对象类型大小,
    就是(x012ca07a-0x012ca070)/sizeof(wchar) = 5 (sizeof(wchar_t) = 2).
    _编译器就是这么帮你编译的没有为什么. 如果是int* p1 ,int *p2;这样 指向的对象类型是int 最后就是除以4 因为sizeof(int)就是4 .
    如果是个结构体譬如struct Age{int Year;int Month,;int Day;} 在对齐是4的情况下就是除以sizeof(Age) = 12. 不一定说的清楚,感觉解释就这么
    拗口,你就当个参考,还是不懂到处找找指针的资料看看.
    _

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制