for( i=0; i<5; a[i] = i++);
来源:互联网 发布:中兴下载软件应用 编辑:程序博客网 时间:2024/05/16 08:59
今天无意中写了这么一小段程序;看到结果时有些吃惊。
#include<iostream>
using namespace std;int main()
{
int a[5]={},i=0;
for( i=0; i<5; a[i] = i++);
for( i=0; i<5; i++)
return 0;
}
自己以为a的各项肯定被赋成了0,1,2,3,4; 因为后置++的优先级高于赋值号=,那么a[i] = i++自当先执行i++,但是++是后置,所以先执行赋值,然后++;
可是运行结果却是
为了便于理解,抓住主要矛盾,再看这样一个程序:
#include<iostream>
using namespace std;
int main()
{
int a[5]={},i=0;
for( i=0;i<5;i++)
a[i]=5;
i=0;
a[i]=i++;
for( i=0;i<5;i++)
cout<<a[i]<<' ';
return 0;
}
结果是:
仔细一想,确实是这样,因为i++相当于这样一个函数:
int op(int i)
{
int tmp=i;
i=i+1;
return tmp;
}
所以,可以这样总结:i++在第二次出现的时候值才会变为增加1后的值。
与前置++对比一下,++i可以理解为这样一个函数:
int op(int i)
{
i=i+1;
return i;
}
因为后置++需要一个临时变量记录一下加一之前的值,所以比前置要慢。在两者都可以使用的情况下,要养成用++i不用i++的好习惯。
1 0
- for( i=0; i<5; a[i] = i++);
- a[i] = i++;
- for(int i = 0;i < 10;i++)和int i;for(i = 0;i < 10;i++)
- for (int i=0;i<GetMenuItemCount(hMenu1);i++)
- swift 如何使用 for(i=0;i<n;i++)
- for(int i = 0; i < 10; i++) 与 for(int i = 0; i < 10; ++i) 的区别
- for(let i = 0; i < 10; i++)和for(var i = 0; i < 10; i++)的思考
- (二)关于for(int i = 0;i<a.length();i++){...}
- 大话 i++、++i和i=++i、i=i++
- k=(++i)+(++i)+(++i)
- for(var i in aArray) 和 for(i=0; i<aArray.length; i++)
- i = i++;i=++i
- i=i++; i=++i
- ++i *=i与 i++*= i
- 关于i++;++i;以及i=i++
- i++ ,++i,i=i++的问题
- i++ ,++i,i=i++的问题
- i++,++i,i=i+1 分析
- 完全大数(高精度)模版
- BZOJ 4443 小凸玩矩阵
- ubuntu常见错误--Could not get lock /var/lib/dpkg/lock
- 【Java】访问控制权限
- 概率与期望
- for( i=0; i<5; a[i] = i++);
- python的异常处理机制
- JDK1.7 ImageIO的一个梗
- 在大学期间对学习方向的寻找ing
- Android学习记录(八) alertDialog和popupwindow简单实现
- Git建立分支
- A - Til the Cows Come Home——
- 基于视觉的障碍物检测和规避
- HDU-4081-Qin Shi Huang's National Road System(次小生成树)