++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;
}