1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 区分C语言中的*(p++) *p++ (*p)++ *(++p) *++p

区分C语言中的*(p++) *p++ (*p)++ *(++p) *++p

时间:2020-01-24 03:23:03

相关推荐

区分C语言中的*(p++)  *p++  (*p)++  *(++p)  *++p

p是一个指针

1.要清楚运算符之间的优先级与结合性:

()运算符,.运算符,++(后缀)运算符的优先级最高,结合方向均为自左向右。

++(前缀)运算符,*运算符的优先级次之,结合方向均为自右向左。

2.要清楚i++ 与 ++i的区别:

分析下面这个程序

include <stdio.h>int main(void){int a = 5, b;b = a++; /*等价于这两条语句b = a; a = a + 1;*/printf("a = %d, b = %d\n", a, b);return 0;}

猜一猜运行结果会是多少?

没错,运行结果如下:

a = 6, b= 5;

理解了i++后我们再来接着看另一个程序

include <stdio.h>int main(void){int a = 5, b; b = ++a; /*等价于这两条语句a = a + 1; b b = a;*/ printf("a = %d, b = %d\n", a, b); return 0;}

这个程序的运行结果与上一个会是一样吗?

正确结果如下:

a = 6, b = 6

再来看另一个程序:

#include <stdio.h>int main(void){int x, y;x = y = 1;x++;++y;printf("x = %d, y = %d\n", x, y);return 0;}

x与y的结果会相等吗?运行结果如下:

x = 2, y = 2

通过以上三个程序可以理解i++与++i:

1、++作为前缀运算符与作为后缀运算符相比,对变量(即运算对象)而言,运算的结果都是一样的,当增1表达式本身的值却是不同的。

2、i++:先使用变量i的当前值作为i++表达式的值,然后再对i进行加1操作。

3、++i:先对变量i进行加1操作,然后将i的值作为表达式i++的值。

4、++(后缀)的优先级高于++(前缀)的优先级。

3.进入正题

当p表示一个指针变量指向数组a[5] = {1,3,5,7,9}的首地址时

理解*(p++)

此时先使用变量p的值作为(p++)的结果,然后将 *p 作为表达式 *(p++)的结果,然后再对p进行加1操作。

示例代码:

#include <stdio.h>int main(void){int a[5] = {1,3,5,7,9};int *p = a;printf("*p = %d, p = %p\n", *p, p);printf("*(p++) = %d, p = %p, ", *(p++), p);printf("*p = %d\n", *p);return 0;}

运行结果如下:

*p = 1, p = 000000000064FE00*(p++) = 1, p = 000000000064FE04, *p = 3

理解*p++:

由于++(后缀)的优先级高于 * 的优先级 ,所以表达式 *p++等价于 *(p++)。

示例代码:

#include <stdio.h>int main(void){int a[5] = {1,3,5,7,9};int *p = a;printf("*p = %d, p = %p\n", *p, p);printf("*p++ = %d, p = %p, ", *p++, p);printf("*p = %d\n", *p);return 0;}

运行结果:

*p = 1, p = 000000000064FE00*(p++) = 1, p = 000000000064FE04, *p = 3

理解(* p)++:

此时先使用*p的值作为此表达式的值,然后执行 *p加1操作。

示例代码:

#include <stdio.h>int main(void){int a[5] = {1,3,5,7,9};int *p = a;printf("*p = %d, p = %p\n", *p, p);printf("(*p)++ = %d, p = %p, ", (*p)++, p);printf("*p = %d\n", *p);return 0;}

运行结果:

*p = 1, p = 000000000064FE00(*p)++ = 1, p = 000000000064FE00, *p = 2

理解*(++p):

首先先将p进行加1操作,然后将p作为++p的结果,再进行*p操作。

示例代码:

#include <stdio.h>int main(void){int a[5] = {1,3,5,7,9};int *p = a;printf("*p = %d, p = %p\n", *p, p);printf("*(++p) = %d, p = %p, ", *(++p), p);printf("*p = %d\n", *p);return 0;}

运行结果:

*p = 1, p = 000000000064FE00*(++p) = 3, p = 000000000064FE04, *p = 3

理解*++p:

因为 * 与++(前缀)优先级相同,且自右向左执行,所以表达式*++p等价于*(++p)。

示例代码如下:

#include <stdio.h>int main(void){int a[5] = {1,3,5,7,9};int *p = a;printf("*p = %d, p = %p\n", *p, p);printf("*++p = %d, p = %p, ", *++p, p);printf("*p = %d\n", *p);return 0;}

运行结果:

*p = 1, p = 000000000064FE00*++p = 3, p = 000000000064FE04, *p = 3

小白一枚,如有错误,还请纠正。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。