【指针】*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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年12月20日
下一篇 2023年12月20日

相关推荐