zoukankan      html  css  js  c++  java
  • 21年4月14指针(一)__精华

    1. 赋值语句解析

    2. 经典代码分析

    1. 赋值语句解析

    int    *s,p;     =>     这里的 s 是 int 类型的 指针变量,p 是 int 类型的 整型变量

    int *p;                 =>     *是和变量名结合不是和类型名结合

    (char *)p;       =>    把类型名和*括起来,表示强转。就是把  p  强制转换成   char类型的指针变量  

    2. 经典代码分析

     ++自增符号,*指针符号  =>  这俩个的优先级都是第2,结合方向自右向左

      int ar[5] = {12,23,34,45,56};
      int* p = ar;
      int x = 0;
      int y = 0;

      x = *++p;
      y = *p;
      printf("%d %d ",x,y);

    指针p先是++,指向下一个地址,也就是23的地址  =>  然后,*发挥作用,取值23

    <<  输出  <<  23 23

     

      x = ++*p;
      y = *p;
      printf("%d %d ", x, y);

    p已经指向了23,结合方向自右向左,先得到23的值  =>  然后,把23的值++

    因为++有回写能力,也就是改变自身的值,这里的ar[1]已经变成24了,这个要注意。ar[1]的值已经改变

    <<  输出  <<  24 24

     

      x = *p++;
      y = *p;
      printf("%d %d ", x, y);

    这一句好好理解,*p++ 这里的++是后置的,后置的,后置的(后置的++会在表达式结束后执行。就是;之后,这个语句结束了,才会++)

    所以这里的p是先取其值,完成对x的赋值后,*的作用消亡了,他结束了。  =>   然后,执行++,对地址++

    *p++ 与 *(p++) 是等效的,因为都是后置++,他执行++的时候,*的作用已完成并且消亡了。

    <<  输出  <<  24 34

     

      x = (*p)++;
      y = *p;
      printf("%d %d ", x, y);

    这里 (*p)++,括号是把(*p)括起来了,把(*p)看作整体,先完成赋值操作

    然后,后置++是对值++,而不是对地址

    <<  输出  <<  34 35

     

     2.1

    (*p)++     *(p++)      *p++    =>  第一个(*p)是整体,对这个整体++。    后两个等效。 

      

    2.2

    ++不管前后,都有回写能力,即改变自身

    特别注意指针里面的  ++  对 值 操作时候值 本身会改变。  牢牢记住

    2.3

    ++自增符号,*作指针符号时候  =>  这俩个的优先级都是第2,结合方向自右向左

    (*作乘号,优先级第3)

    Linux学习笔记
  • 相关阅读:
    animation-fill-mode
    css3 media queries
    三列,左右两列宽度固定,中间宽度自适应
    两列布局,一列定宽,一列宽度自适应
    css3 animation
    transition和animation区别
    transform 和 transition
    弹出框样式
    python map和filter函数
    leetcode Z字形字符串
  • 原文地址:https://www.cnblogs.com/zealwang/p/14661687.html
Copyright © 2011-2022 走看看