现在的位置: 首页 > 综合 > 正文

C++之自增、自减—面试

2012年07月19日 ⁄ 综合 ⁄ 共 1266字 ⁄ 字号 评论关闭

++i,在使用i之前,进行自加动作;

i++,在使用i之后,进行自加动作。

例如:(1)i=1,j=i++;//j=i++,即为j先引用了i的值,然后i完成++的动作

                     printf("%d,%d\n",i,j);//结果为i=2,j=1

             (2)i=1,j=++i;//j=++i,即为i先完成++的动作,然后j再引用

                  printf("%d,%d\n",i,j);//结果为i=2,j=2

             (3) int i=1,j=2;
                   int k=i+++j;//即为k=(i++)+j,i++的值为1,k=1+2=3
                  cout<<k<<endl;//k=3

             (4) int i=3,j=4;
                   i?i++:++j;//条件运算符的运用,若?之前为运算表达式的话,看真假;?之前只是数的话,看是否非0
                  printf("%d  %d/n",i,j);//i=3非0,执行第一个表达式i++,++j没有执行,所以结果为:4,4

             (5)x=x+1,x+=1,x++,哪个效率最高?为什么?

                  x=x+1最低//执行过程:读取右x的地址、x+1、读取左x的地址、将右值传给左边的x(编译器并不认为左右x的地址相同) 4步

                  x+=1其次//执行过程:读取右x的地址、x+1、 将得到的值传给x(x的地址已经读出) 3步

                  x++最高//执行过程:读取x地址、x++运算 2步

             (6)

                #include<stdio.h>
                #define product(x) (x*x)//宏定义 宏名为product(x),字符串为(x*x)x为参数,即为宏的运算表达式
                int main()
                 {
                   int i=3,j,k;
                   j=product(i++);//j=(i++)*(i++)因为i++是先引用,所以j=9.进行了两次i++所以最后i=5,
                   k=product(++i);//k=(++i)*(++i),因为++i先自增两次,再引用,所以k=7*7=49
                   printf("j=%d,k=%d",j,k);//j=9,k=49
                   return 0;
                  }

本文参考:http://blog.csdn.net/lutongbin/article/details/6083810

抱歉!评论已关闭.