c/c++语言开发共享* y ++和++ * y之间的区别?

我对如何执行此代码感到困惑。 假设我们有

int x=30,*y,*z; y=&x; 

* y ++和++ * y之间有什么区别? 以及该计划的产出是什么?

 #include int main(){ int x=30,*y,*z; y=&x; z=y; *y++=*z++; x++; printf("%d %d %d ",x,y,z); return 0; } 

    表达式x = *y++的效果与:

     x = *y; y = y + 1; 

    如果表达式只是*y++; (没有任务)然后它只是与y++;相同y++; ,即y在增量后开始指向下一个位置。

    第二个表达式++*y表示递增y指向的值,其值与: *y = *y + 1; (指针不递增)回答第一个问题会更清楚:

    假设您的代码是:

     int x = 30, *y; int temp; y = &x; temp = *y++; //this is same as: temp = *y; y = y + 1; 

    First *y将被赋值给temp变量; 因此temp分配30 ,然后y值增加1,它的位置开始指向x位置之后的下一个位置(实际上没有变量存在)。

    下一种情况:假设您的代码是:

     int x = 30, *y; int temp; y = &x; temp = ++*y; //this is same as *y = *y + 1; temp = *y; 

    *y第一个值从30增加到31 ,然后将31分配给temp (注意: x现在是31 )。

    问题的下一部分(阅读评论):

     int x = 30, *y, *z; y = &x; // y ---> x , y points to x z = y; // z ---> x , z points to x *y++ = *z++; // *y = *z, y++, z++ , that is // x = x, y++, z++ x++; // increment x to 31 

    *y++++*y之间有什么区别?

    C语言中表达式的含义有两个特征:它产生什么价值以及产生什么副作用

    我们来看看第一个表达式。

    Postfix增量的优先级高于解除引用,因此这是*(y++)

    后缀增量会产生副作用:它会将y的值更改为指向其他位置。 后缀增量也会产生一个值: y在递增之前的值。 然后, *运算符取消引用该值以生成左值:即,您可以将其用作变量,以存储到或从中获取。

    我注意到副作用可能在解除引用之前或之后的任何时候发生。 如果你说

     q = *y++ 

    然后++的副作用可能在任何时候发生。 这可能是:

     q = *y; y = y + 1; 

    或者它可以被视为

     t = y; y = y + 1; q = *t; 

    两者都完全合法。 (当然,除非y本身是一种具有副作用的表达,否则这些副作用必须只产生一次。为清楚起见,我将在整个过程中做出这样的假设。)

    ++*y怎么样? 这很简单: *y生成一个变量,变量的内容递增,表达式的值是递增的值。 请注意,副作用可以无序生成:

     q = ++*y 

    可以视为:

     t = *y + 1; *y = t; q = t; 

    或者作为

     t = *y + 1; q = t; *y = t; 

    请记住, C对副作用可能发生的顺序没有太多限制 ,所以要小心。

    * y ++和++ * y之间有什么区别?

    在表达式*y++*z++ ; 因为后缀版本++优先于* ,编译器将其视为;

     *(y++) = *(z++); 

    ++*y情况下; 编译器将其视为++(*p) ,它将首先递增它指向的对象的值(在本例中为x ),然后返回其递增的值。

    其他可能性汇总表;

     Expression Meaning ------------------------------------------------------------------------------------- *y++ or *(y++) Value of expression is *y before increment; increment y latter (*y)++ Value of expression is *y before increment; increment *t later *++y or *(++y) Increment y first; value of expression is *y after increment ++*y or ++(*y) Increment *y first; value of expression is *y after increment 

    编辑:正如Eric Lippert在他的评论中指出的那样: 表达的价值在增量之前是*y ,增量y之后是误导性的,我想在这里澄清我使用后者之后的词语来强调前一个下一个*y ,将分别用于表达式。
    注意,副作用可以以任何顺序产生,副作用首先产生,后者赋值,或者首先分配值,后者产生副作用。 欲了解更多细节,请阅读答案: – Eric Lippert给出的1,2 。

    我相信你理解运算符++和*在单独使用时的含义。 当一起使用时,运算符优先级开始起作用。 在C ++中,++运算符的优先级高于*运算符。 所以有效*y++表示*(y++)++y*表示(++y)* 。 我希望这有帮助。

      以上就是c/c++开发分享* y ++和++ * y之间的区别?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560336.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐