我学习C语言一年多了。但有些地方不是很了解,经常在考试的时候掉进“陷阱”,如有这方面的好网站可以推荐一下哦。
下面进入正题:
1.i的值是3运算(i++)+(i++)+(i++)之后值是多少呢?书上的表达式的值是12,算完后i的值是6。可以看出是先将括号内的i的值取出参加运算在自加3+4+5=12。
还有一种就是先取出3在自加3+3+3=9。书上只说这是相对C语言的版本来说,应该避免这种情况。
看如下题目
main()
{
int i=100,j=200;
printf("(i++)+j=%d\n",(i++)+j);
i=100;j=200;
printf("i+(++j)=%d\n"),i+(++j);
i=100;j=200;
printf("i+++j=%d\n",i+++j);
}
他的结果是多少呢?我得出的结果全部是301,但我觉得老不对尽所以提了出来。还有循环的时候自加的运算也搞的头晕是用while循环的。
如下的switch以同形式的循环搞不清楚。
mian()
{ int a=4;
switch(a++) →→→→→→→这里是把a的值带到下面才自加还是先自加在带到下面去运算呢。
{
default:a+=10;
case 5:a+=10;
case 4:a+=10;break;
}
printf("%d",a);
}
以上问题我都不懂,希望高手做详细解答,谢谢!
參考答案:printf("(i++)+j=%d\n",(i++)+j);
这句话等价与
printf( "(i++)+j=%d , i+j );
i++;
先做i+j,再做i++
printf( "i+(++j)=%d\n" , i+(++j) );
这句话等价与
j++;
printf( "i+(++j)=%d\n ", i+j );
先做j++,再做i+j
而
printf("i+++j=%d\n",i+++j);
中
i+++j可读性差,有二意性,在计算机里和(i++)+j等价,而不是i+(++j)
但尽量避免这样的写法
再强调下
例如i=3
i++;
这个表达式值为3,i变为4
++i;
这个表达式值为4,i变为4
i++与++i对改变i的值的效果一样,都使i在 原有基础上加1
而对本身表达式的值效果不一样
i=3;a=i++;b=++i;
那a=3,b=4