i++ for 隐式转换问题
By zieckey (http://blog.chinaunix.net/u/16292/index.html)
i++问题:
|
int main(void)
{
int a,x;
for ( a=x=0; a<=1 && !x++;)
{
a++;
}
cout<<"a="<<a<<",x="<<x<<endl;
return 0;
}
|
输出:a=1,x=2
for循环第一圈后,a=x=1
第二圈开始时,判断 a<=1,成立,再判断(!x++),先去x=1,执行 !x 为0,为假,再执行x++,然后推出for循环
所以最后:a=1,x=2
|
int main(void)
{
int a,x;
for ( a=x=0; a<=1 && !x++; a++)
{
a++;
}
cout<<"a="<<a<<",x="<<x<<endl;
return 0;
}
|
输出:a=2,x=1
for循环第一圈后,a=2,x=1
第二圈开始时,判断 a<=1,不成立,短路原则,直接退出for循环
所以最后:a=2,x=1
|
void main(void)
{
int a[] = {6,7,8,9,10};
int *p = a;
*(p++) += 123;
printf("%d,%d\n", *p, *(++p));
}
|
输出:8,8
解释:最后一句“printf("%d,%d\n", *p, *(++p));” 从右向左运算。。。
注意:C中的printf计算参数时是从右向左压栈的
float a = 10.2;
int b = a/2;
注意:这里计算b时,先计算 a/2 ,先把2转换为float,再计算a/2=5.1,然后转换为int类型赋值给b
在进行类型提升时,char、unsigned char、signed char、 short int等都提升为int类型。
阅读(1885) | 评论(0) | 转发(0) |