c++代码表现出奇怪的行为
c++ code showing weird behaviour
为什么显示p的值增加了两次,即使根据代码,它应该在后面增加
#include "iostream.h"
#include "conio.h"
using namespace std;
int main()
{
int i;
cin>>i;
int *p; // p is a pointer to int
int *&r = p; // r is a reference to the pointer p
r = &i; // r refers to a pointer; assigning &i to r makes p point to i
cout<<*p<<*r<<(*p)++<<*p<<*r<<(*r)++<<endl;
getch();
return 0;
}
我认为你想知道的奇怪行为是因为重定向参数被解析和执行的顺序。
#include <iostream>
using namespace std;
int main()
{
int i = 1;
cout << i << i << i++ << i << i << i++ << endl;
return 0;
}
在这个特殊的情况下,在特定的编译器上,我使用…(即这是所有未定义或未指定的行为-我只是试图解释结果。你应该始终避免编写触发未定义行为的代码)。
参数3和6首先求值(因为它们附加了++
操作符?罗德里戈)感谢。
因此最右边的i++
求值为1
, i
求值为2
。
接着计算第三个参数i++
,得到2
,留下i
作为3
。
所有其他参数求值为3
。这就是得到输出
332331
.
请注意,重定向元素的求值顺序没有指定,也就是说,它可能会随着编译器的不同而改变,等等,你无法知道它会是什么。
见也使用std::cout
计算参数的顺序正如@rodrigo向我指出的那样,由于i
在同一表达式中增加了两次,因此结果是未定义的。
所以有很多小妖精在起作用,这是一个可能是正确的,也可能是不正确的输出是如何产生的解释
相关文章:
- 插入一个基本的单向链表节点似乎破坏了我的 c++ 代码?
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 使用代码块在链表的开头插入节点
- 这个用于清空链表的代码可以吗?
- 我需要一些帮助来理解一些涉及C++链表的代码
- 我在 c++ 中的链表代码只附加一个值
- 为什么我的C++代码在以下打印链表的代码片段中显示分段错误?
- 双链表代码修订
- 为什么我在链表中插入的代码没有得到任何输出?
- 如何解释这个双向链表代码
- 此代码安全吗?(链表,C++)
- 为什么下面的使用链表实现线性队列的代码返回垃圾值然后崩溃
- 我在让我的代码输出整个链表时遇到问题.它只是输出我修改过的一些文本文件,而不是整个东西
- 为什么我的代码无法在二叉搜索树中正确执行预购表单?
- 试图在C 中了解哈希表代码
- 我的C 代码在尝试计算表中元素的总和时崩溃
- 编写一个代码,该代码在给定的链表中将删除具有奇数值的元素
- 反向链表的递归函数(代码段说明)
- 根据代码表构建一个huffman树
- 在霍夫曼压缩后将代码表存储在压缩文件中,并从此表构建用于解压缩的树