Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4241950
  • 博文数量: 176
  • 博客积分: 10059
  • 博客等级: 上将
  • 技术积分: 4681
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-24 12:27
文章分类

全部博文(176)

文章存档

2012年(1)

2011年(4)

2010年(14)

2009年(71)

2008年(103)

分类: C/C++

2008-11-24 22:47:43

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) |
给主人留下些什么吧!~~