[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 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...
随机推荐
- jquery ajax生成Select
function DropDownList(url, domId, defaultValue) { /// <summary> /// ajax生成select /// ...
- Unity Shaders and Effects Cookbook (3-5) 金属软高光
书上这一节看得我头昏脑胀,数学渣表示自理不能-- 并且也不了解这个效果的实际意义. 先记录下来,后面真正看懂了再来补充具体理论. 通过一张纹理贴图,定义高光的形状,利用到的纹理贴图有三种 这里并非把纹 ...
- [python]常用的几个包
http://dev.mysql.com/doc/connector-python/en/connector-python-tutorial-cursorbuffered.html https://d ...
- linux 远端执行shell脚本 批量结束各个远端节点进程
#以下是一个本地的shell脚本,用于同时重启远端多台服务器tomcat服务 #!/bin/sh# ancyshi 重新启动节点tomcat服务function restartNodeTomcatSe ...
- WPF-datagrid右键菜单时先选中某行
如题,很多时候,在datagrid中右键菜单时,当前没有选中行. 这就很恶心了对不,如果我是对某一行进行处理,难道还要先用左键选中这一行? 博主就被这个恶心了一把,然后在大佬博客帮助下找到了一个方法, ...
- axios如何进行跨域以及对返回格式为回调函数字符串的处理
自从vue2.0开始不对vue-resouce进行维护了,转而用axios进行代替,axios的官方文档写的很详细,附上链接一枚:http://www.jianshu.com/p/df464b26ae ...
- sql中where以后and和or的用法
SELECT * FROM NOTICE WHERE 1 = 1 AND (Z_STATUS = 1 AND RELEASE_DEPT_ID = '-1' AND IS_ISSUE = 1 OR IN ...
- jquery与javescript的区别(一)
一.找元素: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&g ...
- PhoneGap在Mac环境下使用问题小结
PhoneGap在Mac环境下使用问题小结1,问题一:在执行命令phonegap run ios出现“Cordova needs ios-sim version 1.7 or greater, you ...
- 移动端click时间、touch事件、tap事件
一.click 和 tap 比较 两者都会在点击时触发,但是在手机WEB端,click会有 200~300 ms,所以请用tap代替click作为点击事件. singleTap和doubleTap 分 ...