經查表,首先 * 與 ++ 的優先順序是一樣的,根據編譯原理應當遵守靠右的規則,所以
*p++ = *(p++);
網上已經有很多帖子貼**測試過了,這裡我直接引用結論,那就是i++是先使用 i 後自增,而 ++i 是先自增後使用 i
引用上面2個結論,那麼下面的**會輸出什麼結果呢?
int a = ;
int *p = &a;
printf("%d",*p++); //輸出結果為1
printf("%d",*++p); //輸出結果為100
*p++ 分解步驟如下:
1、 *(p++)
2、 取p的值,為1
3、 對p++,即指標右移,指向10的位置
一句話解釋 即temp = *p; p = p + 1;
*++p 分解步驟如下:
1、前面的 *p++ 已經導致指標右移到了10的位置
2、分解為 *(++p)
3、先執行++p 對指標p進行右移
4、對指標進行取值操作得到100
一句話解釋 即 p=p+1; temp=*p;
我們知道=的優先順序是比++和*都要低的,所以步驟如下:
*q++;
*p++;
//經過上面變化後的指標p與q
*p = *q;
這個式子說白了就是將q的內容賦值給p。
經常用c的朋友肯定知道strcpy這個函式,他的原始碼如下:
char * strcpy(char * strdest,const char * strsrc)
總結,很多內容其實都涉及到了編譯的規則,有機會可以看看編譯原理這本書,比如前++與後++, * 與++的優先順序這樣子。 離散數學 關於p q的理解。
p q,p蘊含q的陳述,有兩種不易區分。q每當p p僅當q。以上兩種陳述方式都是對p蘊含q的陳述。兩種陳述方式很容易弄混,那麼應該如何去區分?以下區分方式有參考 可以從漢語的語意入手。q每當p 每當 隱含意思為 就 補充完整就是 每當q為真,p就為真 即p q。p僅當q 僅當 可理解為 才會,才有可...
古怪的C 語法 p q
牛人們在標準庫中的寫法,以不可讀性換取效率 while p q 1 分析 因為 在變數後面,變數q不會增加,一直到表示式被求值。後置自增操作符 優先順序為1 優先順序要高於解析引用操作符 優先順序為2 高於賦值操作符。後置自增操作符 優先順序為1 優先順序要高於解析引用操作符 優先順序為2 運算過程...
linux下C程式設計(四)之 p q
真的被這個指標弄得差點崩潰了,還算好,今天終於理解下面的這個程式了,變數放在雙等號的右邊,常量放在左邊,結果出現了這個樣子的東西,然後我就傻眼了。p q 這一篇下面的程式會出現錯誤,因為這樣指標p的位址早都變化 p 這個指標成為野指標了,對於指標q也是如此。include int main int ...