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

迷雾终于拨开了。。。

												

[C语言](*p)++ 与 *p++ 与 ++*p 拨开一团迷雾的更多相关文章

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

    (*p)++ 与 *p++ 与 ++*p 拨开一团迷雾 环境:win7 IDE:DEV-C++ 编译器:GCC 1.先说++i和i++的基础 代码如下: ? 1 2 3 4 5 6 7 8 9 10 ...

  2. 负载均衡 IO etc.

    IO多路复用之epoll总结 ↑2013年8月21日11:49:44 EPOLL下的accept(不错的blog) 关于TCP封包.粘包.半包 linux内核TCP相关参数解释 ↑2013年8月14日 ...

  3. 拨开字符编码的迷雾--MySQL数据库字符编码

    拨开字符编码迷雾系列文章链接: 拨开字符编码的迷雾--字符编码概述 拨开字符编码的迷雾--编译器如何处理文件编码 拨开字符编码的迷雾--字符编码转换 拨开字符编码的迷雾--MySQL数据库字符编码 1 ...

  4. Go语言从入门到放弃(二) 优势/关键字

    本来这里是写数据类型的,但是规划了一下还是要一步步来,那么本篇就先介绍一下Go语言的 优势/关键字 吧 本章转载  <The Way to Go>一书 Go语言起源和发展 Go 语 言 起 ...

  5. JavaScript面向对象之Prototypes和继承

    本文翻译自微软的牛人Scott Allen Prototypes and Inheritance in JavaScript ,本文对到底什么是Prototype和为什么通过Prototype能实现继 ...

  6. 徒手用 Go 写个 Redis 服务器(Godis)

    作者:HDT3213 今天给大家带来的开源项目是 Godis:一个用 Go 语言实现的 Redis 服务器.支持: 5 种数据结构(string.list.hash.set.sortedset) 自动 ...

  7. Rust学习(一)

    为什么学习Rust 最近在看Linux相关新闻的时候,看到了Linux内核正在将Rust集成至内核内的消息,且越来越多的嵌入式开发可以使用Rust编程.以往笔者的技术栈只有 C语言 ,C++也只是浅尝 ...

  8. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  9. AfNetworking 3.0源码解读

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

随机推荐

  1. 【noip模拟题】日历游戏(博弈论+搜索)

    直接搜索即可... 注意不要爆栈..所以我们可以分块搜索... 然后太懒且太弱我就不写了... orz hzwer http://hzwer.com/4954.html [问题描述] moreD和mo ...

  2. [转]Loadrunner经典面试题

    http://www.mianwww.com/html/category/it-interview/loadrunner/  史上最全 在LoadRunner中为什么要设置思考时间和pacing 答: ...

  3. 论坛模块__发帖时使用FCKeditor

    论坛模块__发帖时使用FCKeditor 测试 <html> <head> <meta http-equiv="content-type" conte ...

  4. iOS开发之--MVC 架构模式

    随着项目开发时间的增加,从刚开始那种很随意的代码风格,逐渐会改变,现在就介绍下MVC的架构模式,MVC的架构模式,从字面意思上讲,即:MVC 即 Modal View Controller(模型 视图 ...

  5. 使用jq获取文字的宽度

    获取字符串的长度很简单,但是如何获取一个字符串的字体宽度却是一个不太好操作的问题,今天查阅了许多资料,终于找到了解决方法: 1.首先,需要添加一个标签,HTML代码如下: <body> & ...

  6. MVC模式 与 Model2模型 介绍

    Model1回顾 MVC模式:MVC(Model.View.Controller)是软件开发过程中比较流行的设计思想.旨在分离模型.控制.师徒.是一种分层思想的体现. Model2简介Java Web ...

  7. std__vector介绍

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

  8. ios 给UIImageView添加阴影

    _borderView.layer.shadowColor = [UIColor grayColor].CGColor; _borderView.layer.shadowOffset = CGSize ...

  9. js 连等赋值 分析

    JavaScript权威指南-第6版 4.11 赋值表达式 提到了连等赋值的情况,但是解释的不够详细,所以在此总结下: 首先看书上最重要的一句话: 这句话总结下就是: A = B ; // 整个表达式 ...

  10. 170315、spring:@Autowired等注解的别样玩法

    适用场景: 1.IOC容器完成启动就想加载进来的数据 2.多个已经定义好的组件,想在使用的时候通过一行代码就全部拿到 3.等等.... 联想:@Autowired.@Resources等也可以类似使用 ...