【指针】*p++、(*p)++、*++p、++(*p)都是什么东西?

本来就对指针搞不明白,看到这些东西头都大了,救命!

要想搞清他们是什么意思,首先需要知道*和++的优先级

  • *p++ :等效于*(p++),*的优先级较高,先*,再++
  • (*p)++:先*,再++
  • *++p:先++,再*
  • ++(*p):先*,再++
  • p++为先参与程序运行再进行计算+1,++p为先计算+1再参与程序运行

用代码直观展示一下:

#include<stdio.h>
int main()
{
	int a[5] = { 1,2,3,4,5 };
	int b[5] = { 1,2,3,4,5 };
	int c[5] = { 1,2,3,4,5 };
	int d[5] = { 1,2,3,4,5 };
	int* p1 = a;
	int* p2 = b;
	int* p3 = c;
	int* p4 = d;

	printf("指针p1:\n");
	printf("*p1++:%d \t\n", *p1++); 
	printf("a[0]:%d \t\n", a[0]); 
	printf("*p1:%d \t\n", *p1); 
	
	printf("指针p2:\n");
	printf("(*p2)++:%d \t\n", (*p2)++);
	printf("b[0]:%d \t\n", b[0]); 
	printf("*p2:%d \t\n", *p2);  
	
	printf("指针p3:\n");
	printf("*++p3:%d \t\n", *++p3);  
	printf("c[0]:%d \t\n", c[0]);    
	printf("*p3:%d \t\n", *p3);        
	
	printf("指针p4:\n"); 
	printf("++(*p4):%d \r\n", ++(*p4));  
	printf("d[0]:%d \t\n", d[0]);       
	printf("*p4:%d \t\n", *p4);  
	
    system("pause");
	return 0;
}

结果:

分析一下,首先是指针p1:

*p1++:先取指针p1指向的值 (a[0]),为1,然后再将指针自增1 (a[1])
a[0]:数组a第一个元素 (a[0]) 的值依然为1
*p1:指针p1指向了数组a第二个元素 (a[1]),变为2

指针p2:

(*p2)++:先取指针p2指向的值 (b[0]) 为1,然后再将该值加1 (b[0]=b[0]+1),注意p++为先printf再加1,所以输出为1
b[0]:数组b第一个元素 (b[0]) 的值变为2
*p2:指针p2依然指向b第一个元素 (b[0]),但是值变为2

指针p3:

*++p3:先将指针p3自增1 (指向第二个元素),然后再取指针所指向的值 (c[1]),为2
c[0]:数组c第一个元素 (c[0]) 的值依然为1
*p3:指针p3指向了数组a第二个元素 (c[1]),变为2

指针p4:

++(*p4):先取指针p4指向的值 (d[0]),再将该值加1 (d[0]=d[0]+1),注意++p为先加1再printf,所以输出为2
d[0]:数组d第一个元素 (d[0]) 的值变为2
*p4:指针p4依然指向数组d第一个元素 (d[0]),但是值变为2

  • 88
    点赞
  • 464
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值