zoukankan      html  css  js  c++  java
  • [C语言](*p)++ 与 *p++ 与 ++*p 拨开一团迷雾

    环境:win7

    IDE:DEV-C++

    编译器:GCC

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

    代码如下:

    #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)应该没有问题了

    迷雾终于拨开了。。。

    
    
    
  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    网页设计中颜色的搭配
    CSS HACK:全面兼容IE6/IE7/IE8/FF的CSS HACK
    UVa 1326 Jurassic Remains
    UVa 10340 All in All
    UVa 673 Parentheses Balance
    UVa 442 Matrix Chain Multiplication
    UVa 10970 Big Chocolate
    UVa 679 Dropping Balls
    UVa 133 The Dole Queue
  • 原文地址:https://www.cnblogs.com/IAmBetter/p/3175711.html
Copyright © 2011-2022 走看看