zoukankan      html  css  js  c++  java
  • 关于运算符结合顺叙的一些小探索

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

     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。

  • 相关阅读:
    Centos7 搭建FTP服务
    Mitmproxy 安装
    NET Reflector 8 使用
    web sevice 生成代理类及使用
    WCF 动态生成 不用增加引用两种方式
    oracle 表空间、用户名 相关语句
    恢复24小时之内删除的表及表数据
    pl/sql插入报错
    jquer ajax
    pdf增加水印
  • 原文地址:https://www.cnblogs.com/busui/p/5801506.html
Copyright © 2011-2022 走看看