C语言重要知识点总结【9】:C语言运算符(详解) |
您所在的位置:网站首页 › c语言中的括号运算符 › C语言重要知识点总结【9】:C语言运算符(详解) |
目录
一、前言二、运算符分类三、运算符的优先级四、常用运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. 赋值运算符5. 条件运算符6. 逗号运算符7. 强制类型转换运算符8. 下标运算符9. 指针运算符10. 成员运算符11. 求字节运算符12. 位运算符 和 其它
一、前言
C语言主要特点之一:运算符丰富 C语言的运算符包含的范围广泛,共有34种运算符。C语言把括号、逗号、叹号、赋值和强制转换等都作为运算符处理,从而使C语言的运算类型及其丰富,表达式类型多样化。灵活使用运算符可以实现在其他高级语言中难以实现的运算。 基础的C语言运算符是每个程序员都应该学会的,我们非常有必要清晰地知道运算符一共有哪些 和 哪些是需要我们必须掌握的。 这篇文章对C语言常见运算符进行详细讲解,由于在学校写博客的时间少和不方便,所以部分内容我会用我以前用office制作的PPT截图进行分析。 如果文章中有啥错误和分析不到位的地方,希望大家指点 ,谢谢支持,共同进步!!! 二、运算符分类 共12类运算符种类运算符1算术运算符+ - * / % ++ --2关系运算符> = 12下标运算符[ ]13其它如函数调用运算符()【注意】可从一下几个角度大致可将C语言的运算符分为:13类运算符 或 34种运算符,总共有44个运算符。 细心的你会发现上面运算符不够44个,对于第5类运算符:赋值运算符一共有11个。在下面运算符优先级和结合方向表格中会详细介绍。 三、运算符的优先级运算符的优先级一共可分为15级: 1级优先级最高,15级优先级最低。 同一优先级的运算符(当一个运算对象两侧运算符的优先级别相同时),运算次序由结合方向(结合性)所决定, 除了单目运算符、三目运算符 和 赋值运算符这三种是从右往左外,其他的运算符都是从左往右。 常用运算符常见记法: ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符 优先级运算符含义结合方向对象个数1( )圆括号自左至右1[ ]下标运算符自左至右1->指向结构体成员运算符自左至右1.结构体成员运算符自左至右2!逻辑非运算符自右至左1(单目运算符)2~按位取反运算符自右至左1(单目运算符)2++自增运算符自右至左1(单目运算符)2- -自减运算符自右至左1(单目运算符)2-负号运算符自右至左1(单目运算符)2(类型)类型转换运算符自右至左1(单目运算符)2*指针运算符自右至左1(单目运算符)2&取地址运算符自右至左1(单目运算符)2sizeof长度运算符自右至左1(单目运算符)3*乘法运算符自左至右2(双目运算符)3/除法运算符自左至右2(双目运算符)3%求余运算符自左至右2(双目运算符)4+加法运算符自左至右2(双目运算符)4-减法运算符自左至右2(双目运算符)5右移运算符自左至右2(双目运算符)6>大于运算符自左至右2(双目运算符)6>=大于等于运算符自左至右2(双目运算符)6=左移后赋值自右至左2(双目运算符)14a); printf("b>a>c = 5>3>1 结果:%d\n",b>a>c); printf("b>=a = 5>=3 结果:%d\n",b>=a); printf("b!=a = 5!=3 结果:%d\n",b!=a); return 0; }优先级:! > && > || if((year%4==0 && year%100!=0) || (year%400==0)) printf("%d是闰年\n",year);判断闰年的3种方法(判断+范围输出) 赋值运算符共有11个: 结合性:从右到左,优先级14双目(元)运算符赋值运算符: " = "复合的赋值运算符(扩展赋值运算符): += 、-= 、*=、/=、 %=、>>=、b) ? a: b; printf("max = %d",max); }使用条件运算符需要注意的有一点: 例题: 设 x = 2,y = 3,z = 4,k = 5,则表达式“x < y ? x++ : z < k ? x : k”的值是( ) A. 1 B.2 C.3 D.4 分析:首先条件运算符的结合方向是:右 → 左,即可以写成 (x < y ? x++ : z < k) ? x : k 这种形式;先计算 x < y ? x++ : z 结果为真,然后再计算 x++ ? x : k;虽然结合方向是从右到左,但运算时是从左到右计算的。 但是这题需要注意的是 x++ ? x : k 的结果是 x = 2,原因是x现参与条件运算,然后++ 结果:B 6. 逗号运算符结合方向:左 → 右 优先级:15(最低) 强制类型转换运算符:(类型) 右 → 左,优先级2,单目运算符 下标运算符:[ ] 用处:数组结合方向:左 → 右优先级:1 1. 数组名 [下标] 下标:可以是正常量 或 整型表达式 int a[10] //定义一个数组长度为10的数组 a[0] = 66; //对下标为0的元素赋值 void sort(int array[],int n) //选择排序中,定义sort函数,实参传递方式:地址传递 冒泡排序与选择排序(方法+动画+算法十大排序分类图)斐波那契数列(Fibonacci)(黄金分割) 9. 指针运算符指针运算符:& 和 * 结合方向:右 → 左 运算符与含义对象个数优先级&(取地址运算符)1 单目运算符2*(指针运算符)1 单目运算符2 【1】取地址运算符:& &a 是变量a的地址 【2】指针运算符(或称“间接运算符”):* *p代表指针变量p指向的对象 #include int main() { int a = 666, *p; p = &a; //使指针变量p 指向 变量a printf("%d\n",&a); //输出变量a的 地址 printf("%d\n",p); //输出指针变量p指向的 变量a的地址 printf("%d\n",*p); //输出指针变量p指向的 变量a的值 return 0; }成员运算符:-> 和 . 运算符与含义结合方向优先级.(结构体成员运算符)左 → 右1->(指向结构体成员运算符)左 → 右1用处:结构体数组(.和结构体指针(->) 成员运算符:-> 和 . #include #include int main() { struct Student //声明结构体类型 struct Student { int num; char name[20]; char sex; float score; }; struct Student stu; //定义struct Student类型变量 stu struct Student *p; //定义指向struct Student类型数据的指针变量 p p = &stu; //p指向 stu //对结构体成员赋值 stu.num = 10101; strcpy(stu.name,"Li Lin"); //用字符串复制函数给 stu.name赋值 stu.sex = 'M'; stu.score = 88.8; //通过 结构体变量名stu 访问它的成员 printf("No.:%d\tname:%s\tsex:%c\tscore:%5.1f\n\n",stu.num, stu.name, stu.sex, stu.score); //通过 指向结构体变量的指针变量 访问它的成员 printf("No.:%d\tname:%s\tsex:%c\tscore:%5.1f\n\n",(*p).num, (*p).name, (*p).sex, (*p).score); printf("No.:%d\tname:%s\tsex:%c\tscore:%5.1f\n\n",p->num, p->name, p->sex, p->score); return 0; } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |