[C语言](*p)++与 ++(*p)与 *p++ 与 ++*p

首先亮明个人观点,不要认为这样写都算写的不好,还强调大神一般不写这种代码,可读性不高

其实是你的C语言基础太差,读不懂,大神还真的就是这么写的。可以看看C语言库函数中的一些写法

*P++ :*和++都是同级运算符,右结合。但++要整个表达式运算完了才运算,先提取P指向对象的值,然后P再做++运算,指向下一个对象。
*(P++) :这个()有点绞水啊,++要整个表达式运算完了才自加,所以同上,提取的还是P指向的对象值,提取后,P就指向下一个对象了。

(*p)++:这个可是不一样啊,人家是先取值,然后值++;

 ++*p:人家是先取值,然后值++;

为什么有的是值加加有的是地址加加,这就是括号的作用,括号将其绑定为整体。同时也看结合性。核心是p,你来个++*这就没结合性。

、指针与++ --符号进行运算
指针本身也是一种变量,因此也可以进行运算。但是因为指针变量本身存的是某个其他变量的地址值,因此该值进行* / %等运算是无意义的。两个指针变量相加本身也无意义,相减有意义。指针变量+1,-1是有意义的。+1就代表指针所指向的格子向后挪一格,-1代表指针所指向的格子向前挪一格。

*p++就相当于*(p++),p先与++结合,然后p++整体再与*结合。
*p++解析:++先跟p结合,但是因为++后置的时候,本身含义就是先运算后增加1(运算指的是p++整体与前面的*进行运算;增加1指的是p+1),所以实际上*p++符号整体对外表现的值是*p的值,运算完成后p再加1.
所以*p++等同于:*p; p += 1;

*++p等同于 p += 1; *p;

(*p)++,使用()强制将*与p结合,只能先计算*p,然后对*p整体的值++。

++(*p),先*p取值,再前置++,该值+1后作为整个表达式的值。

总结:++符号和指针结合,总共有以上4种情况。--与++的情况很类似。

原文地址:https://www.cnblogs.com/zhangfeionline/p/5882905.html