zoukankan      html  css  js  c++  java
  • 容易忘记指针运算操作

    摘自:http://blog.csdn.net/cool8jay/article/details/1737521

    圆括号()的优先级是1,结合方向是自左向右。
    指针运算符*和自增运算符++的优先级都是2,结合方向都是自右向左。

    把指针运算符*,自增运算符++和圆括号与一个指针变量p搭配,可以都得到以下运算组合:(假定之前有p=&a;)
    1、*p++
    2、*p(++)
    3、(*p)++
    4、*++p
    5、*(++p)
    6、++*p
    7、++(*p)

    分析结果:
    1、*p++,p先跟*结合了,得到p指向的变量的值,即(*p),然后p再跟++结合,使指针p指向内存中下一个位置。结果改变不能立即看出。
    2、*p(++),虽然有优先级更高的圆括号()把++括起来,但就算要先计算括号里面的东西,光有一个++,什么也做不了。没办法,只能让p先跟*结合,再跟++结合。这就跟第1种组合一样。
    3、(*p)++,由于优先级,圆括号里面的先计算,所以先取*p,再使(*p)自增1,而不是使指针p指向内存中下一个位置。结果改变不能立即看出。
    4、*++p,由于结合性,这种写法体现了++和*自右向左的结合方向,先使指针p指向内存中下一个位置,再取*p。结果改变可以立即看出。
    5、*(++p),同第4种组合。
    6、++*p,由于结合性,这种写法体现了++和*自右向左的结合方向,先使*p自增1,再取*p。结果改变可以立即看出。
    7、++(*p),同第6种组合。

    总结一下:
    *p++等价于*p(++),取值,移位。
    (*p)++,取值,增值。
    *++p等价于*(++p),移位,取值。
    ++*p等价于++(*p),增值,取值。


  • 相关阅读:
    idea中如何配置tomcat
    onselectstart属性解决双击出现的蓝色区域
    (二十二)数组的最大值和最小值
    (二十一)数组的初始化
    (二十)两种数据类型的对比
    (十九)数组的内存分配
    (十八)数组概述
    (十六)函数的重载
    (十七)自定义函数
    (十五)函数的入栈和出栈
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007577.html
Copyright © 2011-2022 走看看