-1
A
回答
1
*(p++)
不增加指針指向的值。
如果你想增加值你會做(*p)++
;
另一件事是,您不能保證評估參數的順序。這取決於編譯器。所以左側可以先遞增,然後遞增。無論哪一個參數將以原始值發送,接下來將是原始值+ 1(由於後增量的性質); 在函數之外,如果您沒有在其中修改* p,那麼* p應該已經增加了兩次。
1
如果增量運算符修改same sequence point (statement)
中的same variable
,則會導致未定義的行爲。 例如,如果你調用一個函數是這樣的:
foo(++i, ++i)
C標準不說,其中責令增量應該進行,你不能預測什麼會被傳遞給函數。 它與您的功能相同的情況。
myfunc (*(p++), *(p++))
其中一方可以先評估。
相關問題
- 1. 用方法組替換Lambda表達式時發生編譯器錯誤
- 2. 編譯替換正則表達式
- 3. 編譯錯誤C:錯誤:'。'之前的預期表達式
- 4. Java8中的Lambda表達式的內部編譯器錯誤
- 5. 編譯錯誤,賦值表達式
- 6. Swift 3評估通用表達式時出現編譯錯誤
- 7. 正則表達式替換錯誤
- 8. sed錯誤:替換表達式中的錯誤選項
- 9. 用f77替換Gfortran編譯錯誤
- 10. 在Visual C++中替換編譯器6
- 11. Iambda表達編譯錯誤
- 12. ANSI C編譯錯誤:「','令牌之前的預期表達式
- 13. C++期望的主表達式編譯錯誤
- 14. C編譯器錯誤,但不是C++編譯器中的錯誤
- 15. Visual C++編譯器,編譯錯誤stdlib.h
- 16. 用boost編譯正則表達式C++
- 17. 用正則表達式替換C#
- 18. C++:自定義編碼通用容器的編譯錯誤?
- 19. C++編譯器錯誤C2362
- 20. C編譯器錯誤
- 21. VS2008 C++編譯器錯誤?
- 22. Objective C編譯器錯誤
- 23. 編譯器錯誤C#
- 24. C++編譯器錯誤
- 25. C#編譯器錯誤CS0433
- 26. C編譯器錯誤
- 27. C++編譯器錯誤
- 28. C++ stable_partition編譯器錯誤
- 29. C++編譯器錯誤C2440
- 30. 用正則表達式替換另一個表達式替換
您可能想要搜索術語「序列點」。這是一個關於增量運算符的常見問題,我認爲如果您搜索該網站,您可以找到一些非常好的答案。 – templatetypedef
每行代碼的一項操作就是要走的路 - 您可以使代碼更易於閱讀,而且不會遇到這類問題。 –
@EdHeal +1對於'每行代碼的一個操作是要走的路線' –