记忆C语言运算符(文末福利)

点击上方“异步社区”,选择“置顶公众号”

技术干货,第一时间送达



学习第一门编程语言的时候,你很可能是读过一本书,输入了你不太懂的代码,然后试图弄懂它们的原理。我写的其他书大多是这个样子,这对初学者非常有效。初学的时候,对于有一些复杂的主题,你需要在弄懂它们之前先学会怎么用,因此这是一个简单的学习方式。

然而,一旦你已经学过了一门编程语言,这种慢速摸索语法的方法就不那么有效了。这样学习语言是可以的,但是有一种更快的方法让你学会编程技能,并且建立起使用的信心。这种学习编程的方法像是魔术,但你要相信我,它的效果出奇地好。如果你觉得文章不够看,可以先拿出手机看一段视频。

扫一扫看视频

学习C语言的时候,我想要你首先记住所有的基本符号和语法,然后将它们用到一系列的习题中。这种方法和你学习人类语言的过程很相似:记忆单词和语法,然后将记住的东西用到对话中。只要一开始下功夫简单记住一些东西,你就有了足够的基础知识,以后读写C代码就更容易了。

警告

有的人极其反对背诵记忆。一般他们会说这会抹杀你的想象力,让你变成呆子。其实不会,我就是一个活的证据。我会画油画,会弹吉他,会制作吉他,会唱歌,会写代码,会写书,而且我背过很多东西。因此,这种说法不但毫无根据,而且会破坏学习效率。别把他们的话当回事儿。

1.1 如何记忆

最好的记忆方法过程其实很简单。

1.创建一系列的速记卡,将符号写在一面,将描述写在另一面。你还可以使用一个叫Anki的程序在计算机上完成这件事。我喜欢自己制作速记卡,因为制作的过程也有助于记忆。

2.将速记卡打乱,然后一张一张开始浏览,先只看其中的一面,努力想想另一面的内容,别着急看答案。

3.如果无法想起另一面的内容,那就看看答案,然后复述答案,再把卡片放到单独的一摞里边。

4.看完所有的卡片以后,你手头就有两摞卡片了:一摞是你能快速记起的,另一摞是你没有记住的。拿起没记住的那一摞,下功夫努力去记这些卡片。

5.一个阶段结束以后(通常是15~30分钟),你手头还是会有一摞没记住的卡片。将这些卡片随身携带,只要有空,就背一会儿里边的内容。

记忆的技巧有很多,不过我发现,这是让你能做到即时想起你需要能立即使用的东西的最好方法。C语言的符号、关键字、语法是你需要即时想起的东西,所以这个方法最适用。

另外还要记住,你需要做到卡片的双面记忆。你应该能做到通过描述知道对应的符号,也要能从符号知道它的描述。

最后,你不需要专门停下来去背这些运算符。最好的方法是将其和书中的习题结合起来,以便对记忆的内容进行应用。关于这一点参见下一个习题。

1.2 运算符列表

首先要列出的是算术运算符,与几乎每一种编程语言里的算术运算符都很像。写卡片的时候,描述中要写上它是算术运算符,并说明它的具体功能。

关系运算符用于测试等值性,它们在各种编程语言中也都很常见。

逻辑运算符用于逻辑测试,它们的功能你应该已经知道了。唯一特殊的是逻辑三元运算符(logical ternary),你将会在本文的后面学到。

按位运算符做的事在现代代码中不常见到。它们会用各种方式改变构成字节和其他数据结构的位。我不会在本文中讲这些,不过在一些特定类型底层系统中,它们用起来会非常顺手。

赋值运算符的作用是将表达式赋给变量,不过C语言中很多运算符都可以和赋值合并使用。因而,当我说“与等”(and-equal),我说的是按位运算符,而不是逻辑运算符。

我把下面的操作叫数据运算符,不过它们其实处理的是指针、成员访问,以及C语言的各种数据结构的元素。

最后还有一些杂项符号,它们要么用途多变(如,),要么由于各种原因没法归类,所以一并列在下面。

一边学习速记卡,一边继续阅读本文。如果你每次学习之前花15~30分钟攻读速记卡,每天睡前也花15~30分钟,那么应该用不了几个星期你就能都记住了。

记忆C语言语法      

学完运算符以后,就该记忆你将用到的关键字和基本语法结构了。相信我,你花在记忆上的少量时间,会在后面阅读本文时给你巨大的回报。

正如我在习题5中提到的,你不需要停止阅读本文专门去记忆,你可以两者同时进行,而且也应该这样做。在每天编码之前,用你的速记卡作为热身。将卡片拿出来,背上15~30分钟,然后坐下来做本文的习题。在你阅读本文的时候,试着将你输入的代码作为一种记忆练习。有一个小技巧,就是在你写代码的过程中,将你看到后没法直接想起的运算符和关键字的速记卡收集在一起。一天的学习结束以后,再花15~30分钟学习记忆这些卡片上的内容。

坚持这样做,你就可以更快、更牢固地学会C语言。这比你只通过录入代码,四处碰壁,最后得到一堆二手记忆的过程要高效得多。

1.3 关键字

编程语言中的关键字(keyword)是扩展其符号集的一些单词,它们让编程语言更加易读。有一些语言(如APL)并没有真正的关键字,还有一些语言(如Forth和LISP)除了关键字几乎什么都没有。介于中间的就是像C、Python、Ruby以及很多语言一样的语言,这些语言的基本内容是由关键字和符号混合构成的。

警告

编程语言中处理符号和关键字的过程叫作词法分析(lexical analysis)。这些符号和关键字中的任一单词叫作词素(lexeme)。

关键字描述

1.4 语法结构

我建议你记住这些关键字,也记住语法结构。语法结构(syntax structure)是一系列符号的模式,用来组成C程序的代码格式,如if语句或者while循环这样的固定结构。你应该会发现下面大部分内容都很熟悉,因为你已经学过了一门语言。你唯一要做是学习其在C语言中的做法。

下面是阅读这些内容的方法。

  1. 全大写意味着该位置需要填入内容或空位。
  2. 看到方括号中有全大写就意味着这部分内容是可选的。
  3. 测试你对语法结构的记忆的最好方法是打开文本编辑器,在其中当你看到了一个switch语句,那就说出它的功能,然后试着写出代码格式。

if语句是基本逻辑分支控制工具:

switch语句和if语句类似,但它对简单的整型常量才有效:

while循环是最基本的循环:

你还可以使用continue来实现循环。我们暂时就叫它while-continue循环:

你还可以使用break退出循环。我们称其为while-break循环:

do-while循环是while循环的逆转,它会先运行代码,然后再测试条件来看是不是需要再次运行代码:

它里边也可以有continue和break,用来控制其运行方式。

for循环是一个可控的计数循环,它使用计数器来实现(期望的)固定次数的迭代:

enum会创建一组整型常量:

goto会跳到一个标签的位置,只在很少的情况下有用,如错误检测和退出的时候:

函数是这样定义的:

这个也许不好记,那就来看看下面这个例子,然后你就知道TYPE、NAME、ARG、VALUE分别是什么了:

typedef用来定义新类型:

更具体的例子如下:

别被空格欺骗了,在这个例子中,DEFINITION对应的是unsigned char,IDENTIFIER对应的是byte。

struct是由多种数据类型打包在一起形成的一个概念,它在C语言中会大量使用:

[VARIABLE_NAME]是可选项,除了几个小场景之外,我一般选择不使用它。它通常会像下面这样和typedef组合使用:

最后,union会创建类似struct的东西,不过其中的元素会在内存中重叠。这个东西挺怪,不好懂,所以暂时就这样记住就好了:

1.5 鼓励的话

为每一项创建速记卡以后,先从名字那一面开始学习,再阅读背面的描述和使用格式。在本习题的视频中,我展示了如何用Anki高效地完成这项任务,不过你一样可以用简单的索引卡片来完成这件事情。

我注意到一些学生遇到这样的背诵记忆任务会感觉不适或者害怕。我不确定这是为什么,不过我还是鼓励你无论如何去做这件事情,将它看成一个提高自己记忆方面和学习方面技能的一个机会。熟能生巧,做得越多,这件事对你就越容易。

如果感觉到不爽或者沮丧,这也是很正常的,别当回事儿。也许你花了15分钟,然后心烦得不得了,感觉自己真失败。这很正常,而且这并不意味着你就真的失败了。坚持不懈,你就可以度过一开始的沮丧期,这个练习将教会你两件事情。

  1. 你可以用记忆作为自我能力评估。要知道自己对一样东西的掌握程度,没有什么比记忆测验更靠谱的了。
  2. 克服困难的方法是一次攻克一点。编程是学习这一技巧的好方法,因为在编程中,你很容易就能将问题切分成小块,然后有针对性地下手。将这当成一个机会,把大任务切成小任务,以此建立自信。

1.6 告诫的话

关于背诵记忆,我还有最后一句告诫的话。记住大量的知识点并不会自动让你成为应用这些知识的高手。就算你背下整本ANSI C标准,你可能依然无法成为一个好程序员。我遇到过很多人,他们对于标准C语法几乎无所不知,按理说也该是C语言专家了,但他们依然会写出糟糕、古怪、充满缺陷的代码,有的甚至连代码都写不来。

不要把记忆知识点的能力和高质量完成任务的能力混为一谈。要真正成为高手,你需要在不同的场合下应用这些知识点,直到你掌握它们的使用方法。本文剩下的部分将会助你做到这一点。



本文摘自《“笨办法”学C语言》

《“笨办法”学C语言》

[美] 泽德 A. 肖(Zed A. Shaw) 著

点击封面购买纸书

本书会随书附赠5个多小时充满激情的视频,这是一套完整的C语言视频课程!

作者Zed A.Shaw为急于自我提高编程技能(不限语言)的C语言初学者构建了一套课程,只要跟着学,你会像迄今为止Zed教过的数百万程序员一样获得成功!只要你能自律、投入和坚持! 本书内容十分浅显易读,只要花2天到1周可以读完,读完后既可以获得几千行代码的C编程经验。本书会让你的每一分钟投入都有回报。你很快能学会世界上强大的编程语言之一,成为一名C程序员。

本书是写给学过编程语言的读者的,本书有趣、简单,并且讲解方法独特,让读者了解众多C语言的基础知识和C程序中常见的缺陷,在慢慢增强自己的技术能力的同时,深入了解怎样破坏程序,以及怎样让代码更安全。

小福利

关注【异步社区】服务号,转发本文至朋友圈或 50 人以上微信群,截图发送至异步社区服务号后台,并在文章底下留言你学习C语言经验,或者试读本书感受,我们将选出3名读者赠送《“笨办法”学C语言》1本,赶快积极参与吧!
活动截止时间:2018年 5月3 日

在“异步社区”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步图书一本。赶紧来参加哦!

扫一扫上方二维码,回复“关注”参与活动!

阅读原文,购买《“笨办法”学C语言》

阅读原文

原文地址:http://blog.51cto.com/13127751/2108320

时间: 2024-10-29 22:15:04

记忆C语言运算符(文末福利)的相关文章

使用Spring Boot构建微服务(文末福利)

本文主要内容 学习微服务的关键特征 了解微服务是如何适应云架构的 将业务领域分解成一组微服务 使用Spring Boot实现简单的微服务 掌握基于微服务架构构建应用程序的视角 学习什么时候不应该使用微服务 软件开发的历史充斥着大型开发项目崩溃的故事,这些项目可能投资了数百万美元.集中了行业里众多的顶尖人才.消耗了开发人员成千上万的工时,但从未给客户交付任何有价值的东西,最终由于其复杂性和负担而轰然倒塌. 这些庞大的项目倾向于遵循大型传统的瀑布开发方法,坚持在项目开始时界定应用的所有需求和设计.这

告别“臃肿”,选择微服务(文末福利)

点击标题下「异步社区」可快速关注 参与文末话题讨论,每周赠送异步图书 --异步小编 一直以来,系统的架构设计是IT领域经久不衰的话题,也是构建每一个系统最核心且重要的部分之一.它决定了系统能否满足业务.技术.组织.灵活.可扩展性等多种要求,同时肩负起了解放程序员生产力的作用. 2016年底,由于业务的不断发展,我所在公司维护的项目也越来越"臃肿".随着无数个版本的迭代,以及开发人员的不断增加,开发效率越来越低,每次投产的人力成本和时间成本都逐渐增加,我们一直在思索如何能破局.评估了各种

异步5月新书,大咖云集本本经典(文末福利)

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书. --异步小编 5月小长假回来,小编带来了18本异步新书,这些新书涵盖热点领域Python.深度学习.CPU设计.微服务.少儿编程等领域.可以说本本重点. 有一种语言叫Python <"笨办法学"Python3>基于Python3.6,支持手机扫码看视频.入门级 <Python编程从入门到精通>基于Python3,33小时视频讲解.900多案例分析.入门级

Linux二进制保护(文末福利)

本文将会探索Linux程序混淆的基本技术和动机.通过对二进制文件进行混淆或者加密来保护二进制文件不被篡改的技术被称作软件保护.说到软件保护,指的是二进制保护或者二进制加固技术.二进制加固并不是Linux所独有的,事实上,Windows操作系统有许多关于二进制加固的产品,可供讨论的例子非常多. 许多人没有意识到的是,Linux在这方面也有一定的市场,尽管这方面的技术主要应用于政府使用的反篡改软件产品中.过去十年间,在黑客社区上也发布了许多ELF二进制保护软件,其中一些软件为目前正在使用的许多保护技

JavaScript新手的第一堂函数课:定义与参数(文末福利)

关注微信公众号[异步图书]每周送书 本文包括以下内容: 理解函数为何如此重要 函数为何是第一类对象 定义函数的方式 参数赋值之谜 在本文这一部分讨论JavaScript基础时,也许你会感到惊讶,我们的第一个论点是函数(function)而非对象(object).当然,第3部分会用大量笔墨解释对象,但归根结底,你要理解一些基本事实,像普通人一样编写代码和像"忍者"一样编写代码的最大差别在于是否把JavaScript作为函数式语言(functional language)来理解.对这一点的

如何快速入门Git应用?(文末福利)

点击标题下「异步社区」可快速关注 本文是专门为Git初学者和高级用户撰写的,希望能够在他们精通Git要义的道路上有所帮助.因此,接下来的章节会假定读者已经了解了Git的基本使用,并且度过了学习Git的新手阶段. 本文的内容可以作为Git版本控制基础知识的简单回顾.本文的重点会放在实际应用方面,通过开发一个简易示例项目,演示和解说基本的版本控制操作,以及两个开发者之间的协作流程. 本文将会介绍以下知识: 搭建Git环境和创建Git版本库(init.clone). 文件添加.状态检查.创建注释和查看

学习算法你必须知道的一些基础知识(文末福利)

点击标题下「异步社区」可快速关注 机器学习是解决很多文本任务的基本工具,本文自然会花不少篇幅来介绍机器学习.要想搞明白什么是机器学习,一定要知道一些概率论和信息论的基本知识,本文就简单回顾一下这些知识. 1.1 概率论 概率就是描述一个事件发生的可能性.我们生活中绝大多数事件都是不确定的,每一件事情的发生都有一定的概率(确定的事件就是其概率为100%而已).天气预报说明天有雨,那么它也只是说明天下雨的概率很大.再比如掷骰子,我把一个骰子掷出去,问某一个面朝上的概率是多少?在骰子没有做任何手脚的情

iOS11 开发你了解这些新特性吗?(文末福利)

点击标题下「异步社区」可快速关注 iOS是一个强大的系统,被广泛地应用于苹果公司的系列产品iPhone.iPad和iTouch设备中.iOS通过这些移动设备展示了多点触摸.在线视频以及众多内置传感器的界面.本文将带领大家认识iOS这款系统,为读者步入后面知识的学习打下基础. 1.1 iOS系统介绍 iOS是由苹果公司开发的手持设备操作系统.苹果公司最早于2007年1月9日的Mac World大会上公布这个系统,最初是设计给iPhone使用的,后来陆续用到iPod touch.iPad以及Appl

SQL调优技巧:统计信息(文末福利)

点击上方"异步社区",选择"置顶公众号" 技术干货,第一时间送达 统计信息类似于战争中的侦察兵,如果情报工作没有做好,打仗就会输掉战争.同样的道理,如果没有正确地收集表的统计信息,或者没有及时地更新表的统计信息,SQL的执行计划就会跑偏,SQL也就会出现性能问题.收集统计信息是为了让优化器选择最佳执行计划,以最少的代价(成本)查询出表中的数据. 统计信息主要分为表的统计信息.列的统计信息.索引的统计信息.系统的统计信息.数据字典的统计信息以及动态性能视图基表的统计信