您的位置:首页 > 编程语言 > C语言/C++

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

2015-09-28 22:37 459 查看
摘要:总结了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>


这篇帖子就总结到这里吧,如有不正确的地方还请指出,大家共同进步!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: