3.i++ ++i

看别人的博客,看了半天拿他的示例代码在vsc++程序上一跑才发现他给的结果不对,再在java上一跑结果又变回去他的结果了,具体就是对于初始i=0,for循环i=i++这个语句之后java中i=0,c++中i的值会不断累加,再看另外一个相关博客据说是编译器的原因,不多想了就记住c++的原理吧……

i++:返回i的值,然后i=i+1

++i:返回i+1的值,然后i=i+1

例1:

int main()
{
	int i = 3, j, k;
	cout << i++ << endl;//第1步
	cout << i++ << endl;//第2步
	cout << ++i << endl;//第3步
	system("pause");
	return 0;
}

输出为:


解析:

第一步i++:返回i的值为3,i=i+1后i为4

第二步i++:返回i的值为4,i=i+1后i为5

第三步++i:返回i+1的值为6,然后i=i+1后i为6

例2:

int main()
{
	int i = 0;
	for (int n = 0; n < 3; n++)
	{
		i = i++;
	}
	cout << i << endl;
	system("pause");
	return 0;
}

输出为:3.

解析为:

i=0

i=i++:i被赋值为0,然后i=i+1为1

i=i++:i被赋值为1,然后i=i+1为2

i=i++:i被赋值为2,然后i=i+1为3

即:i=3.

例3:

int a = 2;
int b = (3 * a++) + a;
cout << a << " " << b << endl;

输出为:3 8

int a = 2;
int b = (3 * ++a) + a;
cout << a << " " << b << endl;

输出为:3 12

解析:

b=(3*a++)+a;  a以变化之前的值2代入计算,为3*2+2=8

b=(3*++a)+a;  a以变化之后的值3代入计算,为3*3+3=12

例4:

int i = 1;
int j = 1;
int k = i++ + ++i + ++j + j++;
cout << k << endl;

输出结果为8.

解析:

k = i++ + ++i + ++j + j++;

这一行代码,第一个i++执行后1代入计算,但是i为2,然后++i,3代入运算,i为3,++j2代入运算,j为2,j++2代入运算,j为2.

即k=1+3+2+2=8

程序员面试宝典中的题如下:

1.程序代码如下:

int i = 3,j = 4;

i ? i++:++j;

printf("%d%d\n",i,j);

解析:

i?i++:j++表示如果?前是真则进行i++,否则进行j++。因为i=3是真,执行i++

,j不变化,输出为:i=4,j=4.

如果换作是0?i++:j++,输出则为i=3,j=5.因为判断不为真,所以执行冒号后面的操作。

2.代码如下,求程序代码输出:

int i= 1,j = 2;
int k = i+++j;
cout<<k<<endl;

解析:

i+++j首先结合i++,然后再+j,但是i++是事后计算的,先计算i+j并赋值给k,然后i再自加,所以k的值是1+2=3,然后i才自加到2.

扩展:

int k = ++i+j,则i先自增为2然后加j得到4赋给k,k=4.


3.x=x+1,x+=1,x++,哪个效率最高?

解析:

x=x+1效率最低,它的执行过程如下:

(1)读取右x的地址

(2)x+1

(3)读取左x的地址

(4)将右值传给左边的x(编译器不认为左右x的地址相同)


x+=1其次,其执行过程如下:

(1)读取右x的地址

(2)x+1

(3)将得到的值传给x(因为x的地址已经读出)


x++效率最高,其执行过程:

(1)读取右x的地址

(2)x自增1

综上,x++效率最高,x+=1其次,x=x+1效率最低。


3.代码如下,求输出:

#define product(x) (x*x)
int main()
{
	int i = 3, j, k;
	j = product(i++);
	k = product(++i);
	printf("j=%d,k=%d\n", j, k);
	system("pause");
	return 0;
}

解析:

product(i++)=i++*i++;i=3,所以j=9,此时i已经累加到5.

product(++i)要求先累加i,累加后i=7,所以product(++i)的结果是49.

猜你喜欢

转载自blog.csdn.net/n1neding/article/details/80316906
I
3 I
今日推荐