[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\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 拨开一团迷雾的更多相关文章
- (*p)++ 与 *p++ 与 ++*p 拨开一团迷雾
(*p)++ 与 *p++ 与 ++*p 拨开一团迷雾 环境:win7 IDE:DEV-C++ 编译器:GCC 1.先说++i和i++的基础 代码如下: ? 1 2 3 4 5 6 7 8 9 10 ...
- 负载均衡 IO etc.
IO多路复用之epoll总结 ↑2013年8月21日11:49:44 EPOLL下的accept(不错的blog) 关于TCP封包.粘包.半包 linux内核TCP相关参数解释 ↑2013年8月14日 ...
- 拨开字符编码的迷雾--MySQL数据库字符编码
拨开字符编码迷雾系列文章链接: 拨开字符编码的迷雾--字符编码概述 拨开字符编码的迷雾--编译器如何处理文件编码 拨开字符编码的迷雾--字符编码转换 拨开字符编码的迷雾--MySQL数据库字符编码 1 ...
- Go语言从入门到放弃(二) 优势/关键字
本来这里是写数据类型的,但是规划了一下还是要一步步来,那么本篇就先介绍一下Go语言的 优势/关键字 吧 本章转载 <The Way to Go>一书 Go语言起源和发展 Go 语 言 起 ...
- JavaScript面向对象之Prototypes和继承
本文翻译自微软的牛人Scott Allen Prototypes and Inheritance in JavaScript ,本文对到底什么是Prototype和为什么通过Prototype能实现继 ...
- 徒手用 Go 写个 Redis 服务器(Godis)
作者:HDT3213 今天给大家带来的开源项目是 Godis:一个用 Go 语言实现的 Redis 服务器.支持: 5 种数据结构(string.list.hash.set.sortedset) 自动 ...
- Rust学习(一)
为什么学习Rust 最近在看Linux相关新闻的时候,看到了Linux内核正在将Rust集成至内核内的消息,且越来越多的嵌入式开发可以使用Rust编程.以往笔者的技术栈只有 C语言 ,C++也只是浅尝 ...
- AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager
做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...
- AfNetworking 3.0源码解读
做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...
随机推荐
- Mac 安装Jupyter notebook
python:mac下自带Python 2.7.10 1.先升级了pip安装工具:sudo python -m pip install --upgrade --force pip 2.安装setupt ...
- Shell应用之遍历回收站RecycleBin
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- TreeSet排序,存储自己定义对象,自己定义比較器演示样例
Set:无序.不能够反复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:推断元素的hashCode值是否同样. 假设同样,还会继续推断元素的equals方法.是 ...
- windows环境通过cmd命令到ftp上下载文件到linux服务器
转自:http://jingyan.baidu.com/article/6525d4b1300912ac7d2e941b.html
- Android无线测试之—UiAutomator UiWatcher API介绍一
UiWatcher类介绍与中断监听检查条件 一.UiWatcher类说明 1.Uiwatcher用于处理脚本执行过程中遇到非预想的步骤 2.UiWatcher使用场景 1)测试过程中来了一个电话 2) ...
- ios模拟器键盘不弹出
本文转载至 http://blog.csdn.net/cerastes/article/details/39547967 xcode6键盘iPhone-Portrait-Numb不弹出Cant fin ...
- 如何用sql语句复制一张表
如何用sql语句复制一张表 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete ...
- Egret微端 创建项目(一)
开发环境: window7 egret engine:5.0.14 egret wing:4.1.0 微端:v0.0.14 官方教程:http://developer.egret.com/cn/git ...
- 【BZOJ2801】[Poi2012]Minimalist Security BFS
[BZOJ2801][Poi2012]Minimalist Security Description 给出一个N个顶点.M条边的无向图,边(u,v)有权值w(u,v),顶点i也有权值p(i),并且对于 ...
- POI导出EXCEL经典实现(转载)
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...