我認為是21...指標指向的值加了1原來的不也是跟著加1了嗎?

uj5u.com熱心網友回復:
++在后面,先賦值再+1uj5u.com熱心網友回復:
我代表趙4老濕指出你的兩點錯誤。
首先,運算式 p -> age = p -> age ++ 的行為是未定義的。最后輸出的結果可能是 20,也可能是 21。
其次,說先 ++ ,再賦值,這是沒有任何依據的。
后綴遞增運算式的值是遞增前的原值,同時還有修改運算元存盤值的副作用。所以,從總體上,運算式 p -> age = p -> age ++ 有三個基本動作:
1,計算運算式 p -> age ++ 的值。這個值是結構成員 age 的原始值 20;
2,運算式 p -> age ++ 發起一個副作用,這會修改結構成員 age 的存盤值,修改為 21;
3,運算式 p -> age = p -> age ++ 發起一個副作用,用子運算式 p -> age ++ 的值修改賦值運算子左邊的 p -> page,修改為 20。
注意,運算式 p -> age = p -> age ++ 也要計算一個值,它是 p -> page 被賦值后的值,但被丟棄,所以不用管。
以上三個動作按什么順序發生呢?按照規定,必須先計算運算子運算元的值。總體上,先計算子運算式 p -> age ++ 的值,這個值是 20。所以,這三個動作發生的次序可能是
2 -> 1 -> 3
也可能是
2 -> 3 -> 1
不管哪種順序,成員 age 都會被寫入兩次,但最終結果不同。如果是第一種順序,那么,成員 age 最終的值是 20;如果是第二種順序,則成員 age 最終的值是 21。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284386.html
標籤:C語言
上一篇:與類有關的問題