牛人們在標準庫中的寫法,以不可讀性換取效率:
while(*p
++=*
q++);
1 分析
因為++在變數後面,變數q不會增加,一直到表示式被求值。
後置自增操作符++(優先順序為1),優先順序要高於解析引用操作符(優先順序為2),高於賦值操作符。
後置自增操作符++(優先順序為1),優先順序要高於解析引用操作符(優先順序為2)。
運算過程如下:
求右式的值:先將q值取出(此時為old_q),然後q自增1,最後取出位址old_q指向的值,右側的值為2.
求左式的值:先將p值取出(此時為old_p),然後p自增1,最後取出位址old_p指向的值,將*old_q的值賦值給*old_p.
如果old_q指向的值為'\0',則迴圈結束。
2 **驗證
#include "stdio.h"
void main()
輸出結果
原來的q=12ff60 *q=2
原來的p=12ff3c *p=1
位址變化的結果p-pold=1 變化的q=12ff64 *q=-858993460
變化的p=12ff40 *p=-858993460 *(p-1)=2
3 應用
char * strcpy(char p, const char * q)
等效**
while (true)
4 參考文獻
C語言 p q 理解
經查表,首先 與 的優先順序是一樣的,根據編譯原理應當遵守靠右的規則,所以 p p 網上已經有很多帖子貼 測試過了,這裡我直接引用結論,那就是i 是先使用 i 後自增,而 i 是先自增後使用 i 引用上面2個結論,那麼下面的 會輸出什麼結果呢?int a int p a printf d p 輸出結...
C 中的古怪錯誤提示
在一原始檔中定義了如下兩個函式 使用倒插法,向鍊錶中新增結點 插入元素,倒插法,新插入的元素為表的第乙個元素 2 void ds insertfirst ds link head phead,int elem 生成乙個新的結點 生成乙個新的結點 2 struct ds link node ds cr...
linux下C程式設計(四)之 p q
真的被這個指標弄得差點崩潰了,還算好,今天終於理解下面的這個程式了,變數放在雙等號的右邊,常量放在左邊,結果出現了這個樣子的東西,然後我就傻眼了。p q 這一篇下面的程式會出現錯誤,因為這樣指標p的位址早都變化 p 這個指標成為野指標了,對於指標q也是如此。include int main int ...