後置自增操作符與解引用,前置自增操作符

2021-07-24 10:41:44 字數 711 閱讀 3999

char a[ ] = "hello";

char *p = a;

int i = strlen(a);

while(i > 0)

1 之前一直以為printf("%c", *p++);這句話是先解引用再將p指標++的,

但是我還是太年輕了,不然怎麼會有hello而不是ello呢?

2 但是,運算子的優先順序顯示後置自增操作符(++) 優先順序高於解引用(*)

那麼輸出應該是ello才對啊,但是輸出卻是hello

3 因為*p++ 等價於*(p++)沒錯,只是p++把p的值加1,然後返回p的初始值的

副本作為其求職結果,此時解引用運算子物件是p未增加之前的值。

note:

除非必要,否則不用遞增遞減的運算子的後置版本

前置版本遞增(或遞減)運算子將物件本身作為左值返回,

後置版本則將物件原始值的副本作為右值返回。

建議:除非必須,否則不用遞增遞減運算子的後置版本。

只是原因非常簡單:前置版本的遞增運算子避免了不必要的工作,

它把值加1後直接返回改變了的運算物件。

與之相比,後置版本需要將原始值儲存下來以便於返回這個未修改的內容。

如果我們不需要修改前的值,那麼後置版本的操作就是一種浪費。

對於整數和指標型別來說,編譯器可能對這種額外的工作進行了一定的優化;

但是對於相對複雜的迭代器型別,這種額外的工作就消耗巨大了。

自增 自減 解引用操作符

class int 友元函式,可以訪問類私有成員。返回值為引用型別,因為有時需要這樣的操作 cout int yyy friend ostream operator ostream os,const int i public int int i m i i prefix int operator p...

前置自增與後置自增的區別( i,i )

1.表示式的值不同 這一點想必大多數人都記得 即 i,i的值自增後,返回i自增後的值 i i的值自增,返回的卻是i自增前的值 內部具體操作可以看作是這樣的 前置自增 後置自增 如上所示,後置自增除了返回值與前置自增不同以外,還多了乙個建立臨時物件的步驟,這也就是為什麼會有前置自增比後置自增更高效的說...

細說自增與自減操作符

通常我們用倆個加號表示自增操作符 兩個減號表示自減操作符 myvar myvar 1 myvar myvar 1 可以用myvar myvar 來替換。我們可以把 和 放在變數之後,也可以放在變數之前。例如 myvar myvar 通常情況下,當 和 作用於某個變數自身時,把它們放在變數之前,還是之...