C語言 p q 理解

2021-10-23 08:28:58 字數 899 閱讀 9320

經查表,首先 * 與 ++ 的優先順序是一樣的,根據編譯原理應當遵守靠右的規則,所以

*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 ...