• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于指针的这两种表达式为什么其中一个结果不对

我是爆米花啊 2017-11-07 浏览量:767

定义一个char *P;现在想让P的地址增加4.

((int *)P)++;

P = (char *)(((int *)P)+1);

为什么第一种没增加,第二种可以

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 照搬了一个,顺便也学习下:

    在C语言中,类型转换操作符并不意味着"把这些二进制位看作另一种类型,并作相应的处理"。这是一个转换操作符,根据定义它只能生成一个右值(rvalue)。而右值既不能赋值,也不能用++自增。(如果编译器接受这样的表达式,那要么是一个错误,要么是有意作出的非标准扩展。)

    http://book.51cto.com/art/200901/106852.htm​

    • 发布于 2017-11-07
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了 :http://www.flashtech.com.sg/Catalogue/Level%20Shifter%200911.pdf 回复

其他答案 数量:3
  • P = (char *)(((int *)P)+1);你这句读的往下偏移4字节的char是对的,但是你把P强制转换为int型,指针地址是否4字节对齐就是个问题了
    • 发布于2017-11-07
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :SUD08P06-155L-GE3 Vishay 回复

  • 第一个强制转换对指针的操作是32位的,++也是32位数据加1
    • 发布于2017-11-08
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于指针的这两种表达式为什么其中一个结果不对