为什么 arr[i++] 与 arr[i]++ 会这样做?
Why does arr[i++] vs arr[i]++ do?
为什么下面的第一个代码打印出 15,而不是 20?
#include <iostream>
using namespace std;
int main(){
int arr[] = {10,15,20,15,30};
for(int i =1; i<3;i++){
cout<<arr[i++];
}
}
以及为什么此代码打印出 15 20。
#include <iostream>
using namespace std;
int main(){
int arr[] = {10,15,20,15,30};
for(int i =1; i<3;i++){
cout<<arr[i]++;
}
}
在第一个代码中,循环从 1 开始。它指向元素 15(因为数组索引从 0 开始(。
在 print 语句中,值 i 递增,因此现在 i 位于索引 2(值 20(。现在控件到达 for 循环的"增量部分"。i 的值现在增加到 3。
现在控制检查循环的条件,循环终止。
在第二个代码中,您只需递增数组索引中的值(索引不会递增(。尝试在此之后添加另一个打印语句。你会得到 1621
for(int i =1; i<3;i++){
cout<<arr[i++];
}
但是当你在循环中也递增它时,第一次,I 将初始化为 1,然后在循环中,它将打印 a[i] 的值并递增 i 的值,现在是 2,循环迭代结束,这意味着你用作循环中第三个参数的 i++ 将再次递增 i 的值。 现在它变成 3,3 不小于 3,条件变为假,它不打印任何内容。
相关文章:
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 为什么在C++中对链表这样做?(像堆叠一样处理它们)
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- FlatBuffers C++ reinterpret_cast访问实际上是未定义的行为吗?这样做实际上可以吗?
- 为什么 arr[i++] 与 arr[i]++ 会这样做?
- ideone.com 为什么要这样做?
- std::字符串 's' 通过 '&s[0]' 转换为字符* - 如何/为什么这样做?
- 函数如何在不这样做的情况下在新线程上运行"as if"?
- 为什么在接受输入后循环退出时不会这样做
- 为什么我不能在未链接的 DLL 上调用方法,但可以这样做?C++
- 如何强制呼吁移动构造函数,为什么要这样做
- 我是否必须锁定我刚刚枚举的向量,或者我只在更改它时才这样做?
- 为什么指针不能指向张贴增量,而可以这样做才能预先递增
- C++子字符串为什么这样做
- 为什么循环结束时不这样做?
- 即使明确要求这样做,在qformlayout中动态创建的Qwidget也没有框架
- C++循环、作用域和堆栈(为什么这样做?
- C++为什么要这样做
- C++循环在 EOF 之后继续运行时这样做
- 从用户应用程序访问环0模式(以及Borland允许这样做的原因)