zoukankan      html  css  js  c++  java
  • (*p)++ 与 *p++ 与 ++*p 拨开一团迷雾

    (*p)++ 与 *p++ 与 ++*p 拨开一团迷雾

    环境:win7

    IDE:DEV-C++

    编译器:GCC

    1.先说++i和i++的基础

    代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
     
    //just change simple
    void stop(void)
    {
        system("pause");    
    }
     
    int main(void)
    {
        int i = 1;
        printf("i++ = %d ",i++);
        printf("i = %d ",i);
         
        int j = 1;
        printf("++j = %d ",++j);  
        printf("j = %d ",j);
         
        printf("i++ = : %d   ++i = %d ",i++,++i);
        printf("i = %d ",i);
        printf("++j = : %d   j++ = %d ",++j,j++);
        printf("j = %d ",j);
        stop();
        return 0;
    }

     运行结果:

    复制代码
    1 i++ = 1
    2 i = 2
    3 ++j = 2
    4 j = 2
    5 i++ = : 3   ++i = 3
    6 i = 4
    7 ++j = : 4   j++ = 2
    8 j = 4
    复制代码

    1)i++只有遇到";"分号才会影响i的值, i++输出的值还是1,i的值也是1

    2)i经过分号之后,i=2,因为自增了

    3)++j不管遇到不遇到分号";"都会影响j值和++j值,所以J=2

    4)j的值也是2

    5)根据编译器的不同和操作系统的不同,printf计算方向也不同,这是从右开始计算,先++i,再i++,所以输出3 和3

    6)最后一个i++遇到了分号,所以i=4

    7)从右开始计算,j打印的结果还是2,但是第二次取出来的值是3,所以++j=4

    2.理清概念  *p++ 中 *和++的优先级

    复制代码
     1 #include <stdio.h>
     2 
     3 //just change simple
     4 void stop(void)
     5 {
     6       system("pause");     
     7 }
     8 
     9 int main(void)
    10 {
    11      int i = 5;
    12      int *p;
    13      p = &i;
    14      printf("1-p = %d
    ",p);
    15      int v;
    16     v = *p++; 
    17      printf("v = %d
    ",v); 
    18      printf("2-p = %d
    ",p);
    19      printf("i = %d
    ",i); 
    20      system("pause");
    21      return 0;
    22 }
    复制代码

    运行结果:

    复制代码
    1 1-p = 2686788
    2 v = 5
    3 2-p = 2686792
    4 i = 5
    复制代码

    从结果来看++符号影响了p的值并没有影响i的值,好像++的优先级要高于 指针*符号

    再看例子

    复制代码
     1 #include <stdio.h>
     2 
     3 //just change simple
     4 void stop(void)
     5 {
     6       system("pause");     
     7 }
     8 
     9 int main(void)
    10 {
    11      int i = 5;
    12      int *p;
    13      p = &i;
    14      printf("1-p = %d
    ",p);
    15      int v;
    16     v = ++*p; 
    17      printf("v = %d
    ",v); 
    18      printf("2-p = %d
    ",p);
    19      printf("i = %d
    ",i); 
    20      system("pause");
    21      return 0;
    22 }
    复制代码

    运算结果:

    复制代码
    1 1-p = 2686784
    2 v = 6
    3 2-p = 2686784
    4 i = 6
    复制代码

    怎么++不影响p的值了?

    再看例子

    把 代码稍微调整:v = *++p;

    运算结果:

    复制代码
    1 1-p = 2686788
    2 v = 2686840
    3 2-p = 2686792
    4 i = 5
    复制代码

    啊额,原来 * 和++优先级是同一级别,同一级别按照从右往左的顺序计算。

    OK了,渐渐的所有问题都解决了,

    *(p++) 

    *(++p)

    (*p)++

    ++(*p)应该没有问题了

    迷雾终于拨开了。。。

    1
     
     
     
    分类: C
  • 相关阅读:
    POJ 1321 棋盘问题
    算法导论 4.1 最大子数组问题
    矩阵快速幂
    固定定位
    HTML排版
    CSS笔记2
    HDU 1796 How many integers can you find(容斥原理)
    HDU 2147 kiki's game(博弈经典题)
    HDU 1846 Brave Game(巴什博弈超简单题)
    HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3180125.html
Copyright © 2011-2022 走看看