首页 技术 正文
技术 2022年11月20日
0 收藏 660 点赞 4,288 浏览 1578 个字

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

环境:win7

IDE:DEV-C++

编译器:GCC

1.先说++i和i++的基础

代码如下:

?

12345678910111213141516171819202122232425 #include <stdio.h> //just change simplevoid 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;}

运行结果:

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

1 i++ = 1
2 i = 2
3 ++j = 2
4 j = 2
5 i++ = : 3 ++i = 3
6 i = 4
7 ++j = : 4 j++ = 2
8 j = 4

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

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

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

 1 #include <stdio.h>
2
3 //just change simple
4 void stop(void)
5 {
6 system("pause");
7 }
8
9 int main(void)
10 {
11 int i = 5;
12 int *p;
13 p = &i;
14 printf("1-p = %d\n",p);
15 int v;
16 v = *p++;
17 printf("v = %d\n",v);
18 printf("2-p = %d\n",p);
19 printf("i = %d\n",i);
20 system("pause");
21 return 0;
22 }

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

运行结果:

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

1 1-p = 2686788
2 v = 5
3 2-p = 2686792
4 i = 5

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

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

再看例子

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

 1 #include <stdio.h>
2
3 //just change simple
4 void stop(void)
5 {
6 system("pause");
7 }
8
9 int main(void)
10 {
11 int i = 5;
12 int *p;
13 p = &i;
14 printf("1-p = %d\n",p);
15 int v;
16 v = ++*p;
17 printf("v = %d\n",v);
18 printf("2-p = %d\n",p);
19 printf("i = %d\n",i);
20 system("pause");
21 return 0;
22 }

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

运算结果:

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

1 1-p = 2686784
2 v = 6
3 2-p = 2686784
4 i = 6

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

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

再看例子

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

运算结果:

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

1 1-p = 2686788
2 v = 2686840
3 2-p = 2686792
4 i = 5

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

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

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

*(p++)

*(++p)

(*p)++

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

迷雾终于拨开了。。。

?

1  

  分类: C

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,953
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,478
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,290
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,107
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,739
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,773