• 关于运算符结合顺叙的一些小探索


    早上起来拿手机耍了一下,突然发觉一篇关于运算符结合顺叙的贴子,关键是有一部分我不是很懂。没办法,自己动手,先看看代码:

     1 #include <stdio.h>
     2  
     3  int main(void)
     4  {
     5      char *a = "ace";
     6      printf("%c
    ", *a);
     7      printf("%p
    ", a); 
     8  
     9      char b = *a++;
    10      printf("%c
    ", b); 
    11      printf("%p
    ", &b);
    12      //printf("%p
    ", p); carefully!!!!
    13  
    14      printf("%c
    ", *a);
    15      printf("%p
    ", a); 
    16  
    17      return 0;
    18  }
    19  
    20  /*******************************
    21   * result:
    22   * a
    23   * 0x400670
    24   * a
    25   * 0x7ffe87ed2417
    26   * c
    27   * 0x400671
    28   * ****************************/

     是的,其实关键是这一句:char b = *a++; ,从输出来看,b 等于字符 a,与*a 的结果一样。那说明*a++中的++效果并没有对b起作用。在*a++后,我再将*a输出,果然,结果为字符c了。从地址来看,在*a++后的,a的地址也向后移动了1(char占一个字节) 。
    理论分析:其实在*a++中,* 与 ++ 的运算级别是一样的,而且是右结合的。在语句b = *a++ 中,因为右结合,所以先算a++,在算*a,要注意的是,a++的用法与++a是不一样的。例如在*a++中,详细过程是这样的:a 先被创建一个临时的副本|a|,然后将原本的a执行a++,再对副本用*运算符即*|a|,最后将*|a| 复制给 变量 b。

  • 相关阅读:
    用javascript写星际飞机大战游戏
    Vue源码分析之实现一个简易版的Vue
    Vue源码分析之数据驱动
    Vue源码分析之虚拟DOM
    使用HbuilderX离线打包5+APP
    ERROR in build.js from UglifyJs
    PHP 的一些开发规范
    Markdown使用TOC自动生成导航栏
    Hexo博客skapp主题部署填坑指南
    Docker 官方安装详解
  • 原文地址:https://www.cnblogs.com/busui/p/5801506.html
Copyright © 2020-2023  润新知