-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对于'每行代码的一个操作是要走的路线' –