C语言|C语言指针——你必须明白的几个指针!!!

今天来讲讲*p ,(*p)++,*p++,*(p++),++*p

#define _CRT_SECURE_NO_WARNINGS 1 #include int main(){ int arr[5] = { 1, 2, 3, 4, 5 }; int *p = arr; printf("%d\n", *p); printf("%d\n", *(p++)); printf("%d\n", *p++); printf("%d\n", (*p)++); printf("%d\n", ++*p); return 0; }

我们先了解一下优先级, tip1:*与++的优先级是相同的,他们的优先级都是自右向左 tip2:()的优先级比*与++高
优先级,结合性分析:
*p++由(tip1)知,p先与++结合,再与*结合,而是后置+,所以先用后加,先解引用p,打印这个数,然后指针+1
*(p++)由(tip2)知,(p++)先结合,再与*结合,还是后置加,所以先用后加,先解引用p,然后指针+1;
结论:*p++等价于*(p++)
变量分析:
*(p++):由(tip2)知道++和p结合,变量是p,p++,指针+1;
(*p)++ :括号的的优先级高,p先和*结合,得到*p,再++,*p是变量。
得出(*p)++:是对指针所指向数据进行+1操作
总结:
1,*(p++):取出*p所指向的数据之后,p++,指针+1;
2,*p++:同上
3,++*p:解引用p,找到p指向的值,再进行+1操作,对值+1
4,(*p)++:括号的优先级高,先和()结合,解引用p找到p指向的值,对值进行+1
本代码解释:
1,printf("%d\n", *p);

第一个,arr的首地址放到了,指针变量p中,*p解引用,找到数组的第一个元素
2,printf("%d\n", *(p++));
(p++),先结合,因为是后置+,先用后加,解引用p之后,指针p+1;
3,printf("%d\n", *p++);
和第二个一样 ,右结合,先和++结合,因为是后置+,所以先用后加,解引用p后,指针+1;
4,printf("%d\n", ++(*p));
括号优先级高,(*p)先结合,解引用找到了,一个值,然后对值+1;
C语言|C语言指针——你必须明白的几个指针!!!
文章图片

5,printf("%d\n", ++*p);
*与++的优先级是一样的,结合性是从右向左,所以先解引用p,找到一个值,再对值+1;
C语言|C语言指针——你必须明白的几个指针!!!
文章图片

【C语言|C语言指针——你必须明白的几个指针!!!】 完结

    推荐阅读