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++)

cout<<a[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