它是不好的做法,使用這樣的:使用* str ++是不好的做法嗎?
*str++;
VS
*str;
str++;
凡str
被定義爲char str[];
?
雖然他們做同樣的事情,這似乎是第一個可能更容易出錯,因爲做這樣的事情(*str)++
例如,導致編譯器錯誤,即使它似乎喜歡這就是我們正在做的事情。
它是不好的做法,使用這樣的:使用* str ++是不好的做法嗎?
*str++;
VS
*str;
str++;
凡str
被定義爲char str[];
?
雖然他們做同樣的事情,這似乎是第一個可能更容易出錯,因爲做這樣的事情(*str)++
例如,導致編譯器錯誤,即使它似乎喜歡這就是我們正在做的事情。
就其本身而言,它不是不好的做法
的strcpy
的規範定義是一樣的東西
while (*src)
*dst++ = *src++;
你只是想知道它真的做你想要什麼;您正在獲取str
指向的值,並且作爲副作用您正在增加指針。
您還想知道*str++
和(*str)++
之間的區別;第二個遞增str
指向的值,而不是str
本身。
您還希望知道在評估表達式後不必立即應用副作用;它只需要在下一個序列點(所有表達式已被評估並且所有副作用已被應用的點)之前應用。在上面的示例中,dst
和src
都會在語句結尾增加,但不能保證它們按任何特定順序遞增,或者在分配發生之前或之後遞增。你想避免寫出像*str = *str++
這樣的表達式;行爲是不確定的。
*str++
是idomatic。希望程序員知道沒有括號的含義是安全的。
這個符號已經存在了,並且意味着要被使用。給K & R:
/* strcpy: copy t to s; pointer version 3 */ void strcpy(char *s, char *t) { while (*s++ = *t++) ; }
儘管這似乎一見鍾情神祕,記法 方便是相當大的,而成語應該掌握,因爲你 會經常看到它在C程序。
*str++;
遞增str
指針。在C中,數組名稱是靜態指針,所以你不能增加它。並且(*str)++
遞增在索引零的值。
唯一一位提到過OP聲明'char str []' –
很好的答案..沒有人觀察過OP部分.. – Outlier
這不是非常糟糕的做法,因爲它在較舊的代碼中大量使用。作爲一種個人觀點,我對最終的讀者保持保守態度,因爲這些讀者不會成爲C運營商優先考慮的專家(我承認我屬於這一類別......)
所以我幾乎總是使用括號來消除歧義:
(*str)++;
但我只做到這一點與真正的指針,從不使用數組,即使它們與未知大小聲明,仍然避免可能的錯誤後,當維護代碼。
所以恕我直言,這是確定的
char *str;
,但我不會用它
char str[];
(如果我(或其他程序員),後來寫char str[SIZE]
?)
'( * str)++!= *(str ++)' –
你知道'* str ++'的含義嗎?你是否期望你的代碼的消費者知道? – juanchopanza
@juanchopanza是的。我知道我們解引用str,然後增加指針。我只是想知道是否使用* str ++是不好的做法,因爲我在這裏看到的許多答案似乎使用第二種方法。 –