C++指针小结:由一个问题引发的。。。。。。。。。。。。。。。。。。。

由*p++和*(p++)有什么区别??

这个问题跟i++和++i差不多,(*p)++,是先取指针P的值,然后对其值进行++运算,也就是对 指针指向的内容的值加1.如原来*p=&a=5,经过(*p)++之后&a=6了。

*(p++),也可以写成*p++,是先对指针P进行++运算,然后再取取值。这里就涉及到指针的类型了

  char :1个字节
      char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
      short int : 2个字节
      int:  4个字节
      unsigned int : 4个字节
      float:  4个字节
      double:   8个字节
      long:   4个字节
      long long:  8个字节
      unsigned long:  4个字节

  64位编译器:

      char :1个字节
      char*(即指针变量): 8个字节
      short int : 2个字节
      int:  4个字节
      unsigned int : 4个字节
      float:  4个字节
      double:   8个字节
      long:   8个字节
      long long:  8个字节
      
unsigned long:  8个字节

所以如果是在32位的系统上
char*p那么 (*p)++就是在原来的字节上往高位移动1个字节,
short*p那么(*p)++就是在原来的字节上往高位移动2个字节,
int*p那么(*p)++就是在原来的字节上往高位移动4个字节,
float*p那么(*p)++就是在原来的字节上往高位移动4个字节,
long*p那么 (*p)++就是在原来的字节上往高位移动4个字节,
double*p那么(*p)++就是在原来的字节上往高位移动8个字节.
但是特别注意如果是sizeof(p),那么无论是char*p,还是double*p,或者是int*p得到的都是4个字节。因为操作系统是32位的 32位是4个字节(一个字节八位)。

指针长度和地址总线有关。因为指针记录的就是一个地址,那么32位的就是4字节,64位的就是8字节,也正是地址总线的意义所在~

所以当char* pstr[] = { "ABCD","EFG" };
然后sizeof(pstr)=8; // 4*2=8因为sizeof(pstr)是求指针数组大小的,4*2 bytes 。。。

同理如果在64位操作系统里面那么sizeof(pstr)=16; // 8*2=16

未完待续。。。。。。。。。。。。。。。。。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值