当我突然注意到时,我只是输出了文字.
#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;
}
Run Code Online (Sandbox Code Playgroud)
这种行为对我来说很奇怪,为什么会这样呢?
Set*_*gie 15
您正在导致未定义的行为,因此任何事情都可能发生,并且没有必要推测原因.
表达方式
std::cout<<*p<<"___"<<*(p++)<<"\n"
Run Code Online (Sandbox Code Playgroud)
举一个例子:对所有事物的评估顺序<<是未指定的,因此*p并且*(p++)相互之间没有排序(即编译器不需要先做任何一个).您不能修改变量然后使用它而不对顺序进行修改和使用,因此这会导致未定义的行为.
同样的事情也适用于该程序中的所有其他位置,其中变量被修改并在同一表达式中单独使用.
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |