C语言中指针的自增运算总结

代码如下:

#include<stdio.h>

int main()
{
	int a=1,b=4,c,d,*p;
	p=&a;
	printf("a=%d,*p=%d\n",a,*p);
	(*p)++;
	printf("a=%d,*p=%d\n",a,*p);
	c=*p++;
	printf("c=%d,*p=%d\n",c,*p);
	d=*++p;
	printf("d=%d,*p=%d\n",d,*p);
	return 1;
}
程序运行结果为:
a=1,*p=1
a=2,*p=2
c=2,*p=-858993460
d=1638272,*p=1638272
请按任意键继续.

程序中<span style="font-family: Arial, Helvetica, sans-serif;">(*p)++等价于a++,</span><span style="font-family: Arial, Helvetica, sans-serif;">c=*p++等价于{c=*p;p++},</span><span style="font-family: Arial, Helvetica, sans-serif;">d=*++p等价于</span><span style="font-family: Arial, Helvetica, sans-serif;">d=*(++p)和{++p;d=*p;}</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">由于编译程序为变量分配的地址不连续,所以d的值会出现上述结果。为了分析指针中的自增运算,假设定义变量时内存分配的地址空间连续,且地址在增加,a的为1010</span>
<span style="font-family:Arial, Helvetica, sans-serif;">b的为1012,c的为1014,d的为1016,</span><span style="font-family: Arial, Helvetica, sans-serif;">则结果会变为</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="objc">a=1,*p=1
a=2,*p=2
c=2,*p=4
d=2,*p=2


<span style="font-family: Arial, Helvetica, sans-serif;">说明:</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">指针运算符*和自增运算符++的优先级都是2,结合方向都是自右向左。</span>
</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);"><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">把指针运算符*,自增运算符++和圆括号与一个指针变量p搭配,可以都得到以下运算组合:(假定之前有p=&a;)</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">1、*p++</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">2、*p(++)</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">3、(*p)++</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">4、*++p</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">5、*(++p)</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">6、++*p</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">7、++(*p)</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">分析结果:</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">1、*p++,p先跟*结合了,得到p指向的变量的值,即(*p),然后p再跟++结合,使指针p指向内存中下一个位置。结果改变不能立即看出。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">2、*p(++),虽然有优先级更高的圆括号()把++括起来,但就算要先计算括号里面的东西,光有一个++,什么也做不了。没办法,只能让p先跟*结合,再跟++结合。这就跟第1种组合一样。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">3、(*p)++,由于优先级,圆括号里面的先计算,所以先取*p,再使(*p)自增1,而不是使指针p指向内存中下一个位置。结果改变不能立即看出。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">4、*++p,由于结合性,这种写法体现了++和*自右向左的结合方向,先使指针p指向内存中下一个位置,再取*p。结果改变可以立即看出。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">5、*(++p),同第4种组合。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">6、++*p,由于结合性,这种写法体现了++和*自右向左的结合方向,先使*p自增1,再取*p。结果改变可以立即看出。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">7、++(*p),同第6种组合。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">总结一下:</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">*p++等价于*p(++),取值,移位(不安全)。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">(*p)++,取值,增值。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">*++p等价于*(++p),移位,取值(不安全)。</span><br style="box-sizing: content-box; color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);" /><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">++*p等价于++(*p),增值,取值。</span>
</span></span>

发布了24 篇原创文章 · 获赞 8 · 访问量 5万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览