【发布时间】:2023-05-31 20:33:01
【问题描述】:
我刚输出文字,突然发现。
#include <iostream>
int main()
{
int array[] = {1,2,3,4};
int *p = array;
std::cout << *p << "___" << *(p++) << "\n";
// output is 1__1. Strange, but I used brackets! it should be at
// first incremented, not clear.
p = array;
std::cout << *p << "___" << *(++p) << "\n";
// output is 2_2 fine, why first number was affected? I didn't intend
// to increment it, but it was incremented
p=array;
std::cout << *p << "___" << *(p + 1) << "\n";
// output is 1_2 - as it was expected
p = array;
return 0;
}
这样的行为对我来说很奇怪,为什么会这样?
【问题讨论】:
-
在同一表达式中使用带参数的增量会调用未定义的行为。