优先级和类型转换分析

易错的优先级


typedef struct _demo
{
    int* pInt;
    float f;
} Demo;

int func(int v, int m)
{
    return (v & m != 0);        //优先级!=高于&,应改为return ((v & m) != 0); 
}

int main()
{   
    Demo* pD = (Demo*)malloc(sizeof(Demo));
    int  *p[5];       //优先级[]高于*,应改为int*  p[5];
    int  *f();          //优先级()高于*,应改为int*  f();
    int i = 0;
 
    i = 1, 2;         //优先级=高于,,应改为 i = (1, 2);
    
    *pD.f = 0;     //优先级.高于*,应改为pD->f = 0;
    
    free(pD);
    
    return 0;
}


C语言隐式类型转换

算术运算式中,低类型转换为高类型;

赋值表达式中,表达式的值转换为左边变量的类型;

函数调用时,实参转换为形参的类型;

函数返回值,return表达式转换为返回值类型

例1

char c = 'c';

short s = 0;

s = c;

printf("%d\n", sizeof(s+c));   //输出为4

char型和short型参与运算时,必须先转换成int

例2

int i = -2;
unsigned int j = 1;
if( (i + j) >= 0 )
{
        printf("i+j>=0\n");
}
else
{
        printf("i+j<0\n");

}
printf("i+j=%d\n", i + j);   //输出i+j>=0回车i+j=-1

i在内存中补码十六进制形式为0xFFFFFFFFFFFFFFFE,由于参与了算术运算,转换为unsigned int型,加j等于0xFFFFFFFFFFFFFFFF,为unsigned int型,所以大于0;

printf中,%d是以int型输出,0xFFFFFFFFFFFFFFFF是-1的补码,所以会输出-1。

类型转换更多请看http://blog.csdn.net/selooloo/article/details/5016836

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值