环境: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. 【BZOJ】1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1688 很水的状压.. 提交了很多次优化的,但是还是100msT_T #include <cst ...

  2. 关于Android Animation的setFillBefore、setFillAfter和setFillEnable

    1. 如果是独立的Animation,只有setFillAfter有效,设置为true动画结束后保持最后的状态 2. 如果是AnimationSet中的Animation,因为Animation的作用 ...

  3. Centos7 之安装Logstash ELK stack 日志管理系统

    一.介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源 ...

  4. CSS代码重构与优化

    CSS代码重构的基本方法 前面说到了CSS代码重构的目的,现在我们来说说一些如何达到这些目的的一些基本方法,这些方法都是易于理解,容易实施的一些手段,大家平时可能也不知不觉地在使用它. 提高CSS性能 ...

  5. Java线程之CompletionService批处理任务

    如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...

  6. std::unique_lock

    /*与Mutex RAII相关,方便线程上锁,相比std::lock_guard提供了更好的上锁解锁控制,反正我是没看出来也是在构造时上锁,在析构时解锁,感觉和lock_gurad大差不差都是在线程函 ...

  7. anguglar 2+ md5加密

    1.安装 npm install ts-md5 --save 2.使用 import {Md5} from "ts-md5/dist/md5"; constructor() {co ...

  8. ajax请求步骤

    ajax步骤:第一步:创建xmlhttprequest对象,var xmlhttp = new XMLHttpRequest(); XMLHttpRequest对象和服务器交换数据.第二步:使用xml ...

  9. 测试csscss层叠顺序

    <!Doctype html><html lang="zh-CN"><head><meta charset="utf-8&quo ...

  10. Python--上传文件和下载文件

    #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/12/28 13:56# @Author : Aries# @Site : # @ ...