c语言学习笔记(9)优先级及类型转换分析

来源:互联网 发布:北京理光软件研究所 编辑:程序博客网 时间:2024/05/16 08:56

摘要:总结了c语言优先级易错的部分,隐式转换类型的规则,分析了一个实例。


一、c语言易错优先级总结

    如下表:

优先级问题

表达式

实际结果

.的优先级高于*,因此c引入了->消除该问题

*p.f

对p取偏移f,作为指针,然后进行解除引用操作*(p.f)

[]高于*

int *ap[]

ap是一个元素为int类型指针的数组int *(ap[])

函数()高于*

int *fp()

fp是一个函数,返回

int *,int *(fp())

==和!=高于位操作

val&mask!=0

val&(mask!=0)

==和!=高于赋值运算

c=getchar!=EOF

c=(getchar()!=EOF)

算术运算符高于位移运算符

msb<<slab+4

msb<<(slab+4)

逗号运算符在所有运算符里面优先级最低

a=1,2

(a=1),2

    在我看来,除了理解以外,更多的是记忆,然后做的多了,也就记住了。


二、C语言隐式类型转换规则

    1.算术运算中,低类型转换为高类型,类型高低如下:

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

    3.函数调用时,实参转换为形参的类型。

    4.函数返回时,return表达式转换为返回值类型。


    下面通过一个实例解释上面的四个规则:

<span style="font-size:18px;">#include <stdio.h>int main(){      char c='c';      short d=0;      short g=0;         int i = -2;   unsigned int j = 1;      int add(int a,int b)// 实参转换为形参的类型    {       return a+b;// return表达式转换为返回值类型    }   g=add(c,d);// 表达式的值转换为左边变量的类型   printf("%d\n",sizeof(c));   printf("%d\n",sizeof(d));   printf("%d\n",sizeof(g));   printf("d+c size is:%d\n",sizeof(d+c));// 低类型转换为高类型      if( (i + j) >= 0 )    {       printf("i+j>=0\n");    }   else    {       printf("i+j<0\n");    }      printf("i+j=%d\n", i + j);      return 0;}</span>

    这篇帖子就总结到这里吧,如有不正确的地方还请指出,大家共同进步!

0 0