环境: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\n",i++);
printf("i = %d\n",i); int j = 1;
printf("++j = %d\n",++j);
printf("j = %d\n",j); printf("i++ = : %d ++i = %d\n",i++,++i);
printf("i = %d\n",i);
printf("++j = : %d j++ = %d\n",++j,j++);
printf("j = %d\n",j);
stop();
return 0;
}

运行结果:

 i++ =
i =
++j =
j =
i++ = : ++i =
i =
++j = : j++ =
j =

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++ 中 *和++的优先级

 #include <stdio.h>

 //just change simple
void stop(void)
{
system("pause");
} int main(void)
{
int i = ;
int *p;
p = &i;
printf("1-p = %d\n",p);
int v;
v = *p++;
printf("v = %d\n",v);
printf("2-p = %d\n",p);
printf("i = %d\n",i);
system("pause");
return ;
}

运行结果:

 -p =
v =
-p =
i =

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

再看例子

 #include <stdio.h>

 //just change simple
void stop(void)
{
system("pause");
} int main(void)
{
int i = ;
int *p;
p = &i;
printf("1-p = %d\n",p);
int v;
v = ++*p;
printf("v = %d\n",v);
printf("2-p = %d\n",p);
printf("i = %d\n",i);
system("pause");
return ;
}

运算结果:

 -p =
v =
-p =
i =

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

再看例子

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

运算结果:

 -p =
v =
-p =
i =

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

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

*(p++)

*(++p)

(*p)++

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

迷雾终于拨开了。。。

												

最新文章

  1. 编译可在Android上运行的qemu user mode
  2. php命名空间和autoload
  3. Architecture.the-reactive-manifesto
  4. MSClass 和setInterval 的并发,ajax定时有采集信息滚动显示
  5. Oracle存储过程执行update语句不报错不生效问题
  6. location.pathname;outline:medium;undefined不能加引号
  7. mysql的interval函数用法
  8. WINCE6.0 error C2220: warning treated as error问题解决
  9. phpstorm显示行号
  10. 《Java从入门到放弃》JavaSE入门篇:异常
  11. CentOS文件权限管理
  12. C# 插入文本框到PPT幻灯片
  13. Android OS 源码 引入和编译 jar / so库
  14. python--多线程多进程
  15. 【PS技巧】如何拼图
  16. 深入解析内存原理:RAM的基本原理
  17. java 传入list集合 返回树形菜单,for循环遍历
  18. python语法(三)— 循环
  19. Awk 从入门到放弃(5)– Awk模式(Pattern)之一
  20. visibility和display

热门文章

  1. sqlalchemy 判断字段是否存在
  2. 类库服务寄宿到WebHost
  3. C++ 访问控制 public, protected, private, 友元
  4. EF简单查询
  5. MySQL- INSTR 函数的用法
  6. System.getProperty()方法大全 (转载)
  7. js/vue 高德地图绘制驾车路线图
  8. 170329、用 Maven 部署 war 包到远程 Tomcat 服务器
  9. 使用Ansible自动配置JDK环境
  10. BSSID,SSID,ESSID区别