首先亮明個人觀點,不要認為這樣寫都算寫的不好,還強調大神一般不寫這種代碼,可讀性不高
其實是你的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種情況。--與++的情況很類似。