看到这篇文章,你就离出事儿……哦,不,是出师就不远了,因为第一阶段的学习已经告一段落了!怎么样,开不开心,意不意外 o(* ̄︶ ̄*)o ~~~

今天将会补充之前没有覆盖的一些零零散散的内容。好啦,开始进入正文了!

1
赋值运算符

  

赋值运算符是 C 语言中用得最多的一个运算符,它设计的简便与否直接影响到了 C 语言的开发效率。因此它的语法为将右边的值放到左边的变量里边,因为它的执行方向是自右向左,比如

需要注意的是赋值运算符的左边必须是一个 lvalue,变量名就是 lvalue,但常数就不是了,所以你把 5 写在赋值号的左边就会出错,比如说执行

编译系统会提示类似于“error: lvalue required as left operand of assignment”的错误。很多人在这里将 lvalue 理解为左值,即“left value of the赋值运算符”,对应的将 rvalue 理解为右值。但是这是一种不完全正确的理解方式。那到底什么是 lvalue 什么是 rvalue 呢?

1.1

lvalue 与 rvalue

将 lvalue 和 rvalue 理解为左值和右值实际上理解并不全面,并且常常容易犯思想上的错误。一种更合理的解释是 lvalue 指用于识别或定位一个存储位置的标识符,同时还必须是可改变的;rvalue 你可以理解为 readable value,即任何可读取的值都被认为是右值(非左值)。比如尝试执行下面这段代码

同样会得到报错,如下所示

在这里如果你认为 lvalue 只是赋值运算符左边的值(即左值),那这个错误提示就无法理解了。因为首先看括号内的内容 (a++),他肯定是没有问题的,那么问题肯定是出在外面的那一层 ++ 上,但是这个时候明显是问题处在 ++ 的右边而不是左边啊,应该报 rvalue 的错误,而不是 lvalue 的错误啊。

但是如果你知道 lvalue 是用于识别或定位存储位置的标识符,那么就好解释了:(a++) 是先将变量 a 的值(5)做为整个表达式的值返回,再将 a 自增 1(类似于 a = a + 1),所以++(a++); 等价于 ++(5), a = a + 1;,5 是一个常量,当然不能 5 = 5 + 1 了(即++5)~

2
复合的赋值运算符

  

由于赋值运算符的使用度非常高,所以 C 语言的作者也想出了如下的一些编辑的方案。

3
自增自减运算符

  

当我们需要对一个变量加一或减一并赋值给自己的时候,我们可以写成 i++、i-- 或 ++i、--i 的形式。它们也被称为增量减量运算符,或 ++、-- 运算符。另外,自增、自减运算符只能作用于变量,而不能作用于常量或表示

3.1

i++ 与 ++i 的区别

(1) i++ 是先使用变量 i 中保存的值, = 再对自身进行 ++ 运算;

(2) ++i 是先对自身进行 ++ 运算,再使用变量 i 的值(这时候变量i的值已经加 1 了)。

其实这两者间的区别很好记忆,谁在前面先执行谁,i 在前面先使用变量 i 中保存的值,++ 在前面先对自身进行 ++ 运算,比如说如下的这段代码

将会输出如下的结果

4
逗号运算符

逗号表达式的语法是

表达式1,表达式2,表达式3,...... ,表达式n

逗号表达式的运算过程为:从左往右逐个计算表达式;逗号表达式作为一个整体,它的值为最后一个表达式(即表达式n)的值。不过,逗号运算符在C语言的所有运算符中,是优先级最低的,连赋值运算符的优先级都比逗号运算符要高,所以 a = 3, 5 相当于

需要注意的是,在 C 语言中看到的逗号,不一定就都是逗号运算符,因为在有些地方,逗号仅仅是被用作分隔符而已。比如

这里逗号都是作为分隔符使用,而不是运算符。

5
条件运算符

  

有一个操作数的运算符称为单目运算符,有两个操作数称为双目运算符,然而 C 语言还有唯一的一个三目运算符,它的作用是提供一种简写的方式来表示 if-else 语句,其语法如下

exp1 是条件表达式,如果结果为真,返回 exp2,如果为假,返回 exp3,所以下面的代码

等价于

对于比较简单的条件分支,推荐使用条件运算符哦,因为他可以 增加你代码的逼格,哦不,是使你的代码变得简洁。

6
goto 语句

  

goto 语句可以说是一个历史遗留,因为早的编程语言都留有很多汇编语言的痕迹,goto 语句就是其中之一。goto 语句的作用就是直接跳转到指定标签的位置,其语法为:

goto 标签;

其中标签需要被定位于某个语句的前边,比如:

可以看到 while 本身是一个死循环,但是当执行到 i=11 的时候,会通过 goto 语句跳转到 Label 所对应的位置,执行打印输出。

开发中要尽量避免使用 goto 语句。其实就连 C 语言的作者也觉得 goto 语句非常容易被滥用,并且建议一定要谨慎使用,甚至根本不用它。但在一种情况下使用 goto 语句是情有可原的,那就是当面临要跳出多层循环的时候,使用 goto 语句要比多个 break 语句好使

7
注释

  

C 语言的注释有两种方式,一种是大家常用的,将注释写在两个连续斜杠的后边:

// 我是是注释,编译器不会注意我的

这样每一行注释的开头都需要有两个斜杠,有时候你可能需要写多行注释,那你可以使用 /* 注释的内容 */ 来实现:

初学的程序员有的时候会滥用注释,具体来讲就是在每一段代码的后面都会加上一段注释。在实际编程中,我们需要在函数的下面使用一个跨多行的注释,主要用于介绍函数的功能,参数的含义和返回值;再有就是对于变量的命名及适用范围进行说明;最后就是在自己觉得需要地方加了……嗯,不要到处加啊 [\手动捂脸]。

8
参考

[1]  “小甲鱼” 视频课程《带你学C带你飞》【第一季】P16

往期精彩回顾


5. 很“迷”的字符与字符串
6. 简单又复杂的“运算符”,建议你看一哈
嘿~这里有一份超实用的 switch 教程,真的好想推荐
8. 一花一世界,while fo r 循环?
超震惊!!微软产品经理每天的工作内容竟然是这个...

欢迎大家关注我的知乎号(左侧)和经常投稿的微信公众号(右侧)

听说学完这些你就可以出师了?相关推荐

  1. MyBatis(一)—— 2h学完这篇就可以入门mybatis啦

    一.简介 1.1 什么是MyBatis MyBatis是一个持久层框架,既然和持久层有关那就可以简单理解成和数据库有关,既然是框架那么就肯定是为了简化数据库有关的操作.由于传统的JDBC代码处理数据库 ...

  2. 用html制作一个华为页面,Web前端项目实战——华为荣耀商城(学完html+css就可以做)...

    复习: 1.1到目前所学的布局方式 table布局: div+css布局: 固定布局 百分比布局 1.2 盒子模型 Margin  border padding  content 1.3 布局模型 流 ...

  3. html项目_学完html+css就可以做的前端项目实战

    爱创课堂专业前端培训 微信:haomei0452 前端资料免费分享平台 关注 博雅互动项目预览: 一.项目搭建 css部署:一定注意css引入顺序1 清除默认样式css文件 reset.css2 可以 ...

  4. 没有必要学完oldboy课程再找工作,现在就可以试试

    今天去琴行的路上,我突然意识到,自己其实没有必要非得整个oldboy的课程全部学完再开始找工作. 今天群里又有人宣称自己要学完之后再去投简历.出门之后,想到这件事情,我忽然再想:为什么要循常例呢? 学 ...

  5. 数据结构两个月学完_这是我作为数据科学家两年来所学到的

    数据结构两个月学完 It has been 2 years ever since I started my data science journey. Boy, that was one heck o ...

  6. Kaggle官网免费课程:从Python到机器学习,4小时学完一门,48小时掌握数据科学...

    点击我爱计算机视觉标星,更快获取CVML新技术 赖可 发自 凹非寺 量子位 报道 | 公众号 QbitAI 听说过Kaggle官网的免费"微课"吗? 想学Python .机器学习. ...

  7. 学python能干什么工作-什么是Python?学完之后能做哪些工作?

    原标题:什么是Python?学完之后能做哪些工作? 什么是Python,Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初 ...

  8. 3天学完10套Python顶级教程,端午节技术人消失之谜

    端午节,擦姐粉丝群 群友A:擦姐,消失去干啥了? 群友B:听说擦姐去刷脸要福利去了 群友C:啥课? 端午节,擦姐慷(hou)慨(zhe)激(lian)昂(pi)从 CSDN 运营姐姐手中,要来了一波大 ...

  9. 学完python的心得体会,初学者对python的感想

    如何学习Python总结之谈 学习python主要是自学或者报班学习的方式,但不建议自学.如果想通过学习python改行,那就需要明确一下自己的方向. 因为python编程有很多方向,有网络爬虫.数据 ...

最新文章

  1. git学习小结(未完待续)
  2. 再搞75块单片机开发板!
  3. NET命令的基本用法
  4. 分类 Classification
  5. VMware虚拟化技术培训(6) 虚拟网络和虚拟存储
  6. linux使用中的问题 --- (Another app is currently holding the yum lock; waiting for it to exit...)
  7. linux命令行中的大括号,linux命令行学习(19):花括号扩展(brace expansion)
  8. UDK开发环境搭建完全流程
  9. STC单片机程序下载原理与自动下载
  10. JavaScript实现HTML导航栏下拉菜单[悬浮显示]
  11. 图像处理之图像直方图
  12. jenkins 常用插件
  13. 世界上到处都是有才华的穷人
  14. 天空卫士与电子科技大学持续合作,助力数据安全人才培养
  15. 外卖扫码点餐独立全开源小程序源码+VUE前端
  16. 事物(Transaction)
  17. 1088: 手机短号 (多实例)
  18. Kerberos学习(四)
  19. 百度地图 -- 离线地图开发
  20. java 写日志步骤

热门文章

  1. BUUCTF:[HBNIS2018]caesar
  2. springboot之resultType、resultMap的正确打开方式【超级详细】
  3. javascript 正则 判断电话号码格式
  4. 前后端分离 - 统一JSON 交互
  5. esper java_java-从Esper套接字开始
  6. 解决报错TypeError:unsupported operand type(s) for +: ‘NoneType‘ and ‘str‘
  7. 消息队列(基础篇)- 7 消息积压了该如何处理
  8. php 跳转伪造referer,PHP页面跳转与跨站提交伪造Referer地址来源
  9. Override? Or Overwrite?
  10. 【掌控板】3、向txt文件写入字符串、声音数据获取