学习C语言不是一朝一夕的事情,但却也不是需要花费几年时间才能精通的。

那么如何以最小的代价,学习C语言呢? 这最小的代价也绝不是什么捷径,而是以最短的时间去收获最多的知识,但同时也意味着你需要经历艰苦的过程。学习C语言是如此,学习其他语言亦是如此。

一、要读就读好书,否则不如不读

所有的初学者都面临的一个问题便是:如何选取书。好的开始才是成功的一半,选择一本优秀的教材便是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。

Kernighan和Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称C语言中的经典,不过旧版的很多内容都已经过时了,和现在的标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。 如果你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的很多C语言的缺陷都已被改进,不过能够了解一些历史也不是什么坏事。然后你可以挑战一下《Expert C Programming》(中译名《C专家编程》),书如其名,这本书颇具难度,一旦你仔细读完并能透彻理解,你便可以放心大胆地在简历上写“精通C语言”了。

切记一个原则,不要读自己目前还看不懂的书,那是浪费生命。而且,读这样的书,很容易打击你学习的信心。如果你看不懂,那你一定是缺失了某些必备的基础知识。此时,你要仔细分析自己需要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。

二、Unix/Linux还是Windows,这是个很大的问题

编程环境影响着程序员的编程思维。Windows的编程环境大多依赖集成开发环境,比如Visual Studio。而Unix的编程环境下,程序员更加钟爱Makefile与控制台。显而易见,集成开发环境更容易上手一些。在Windows上学习C语言,只需要会按几个基本的Visutal C++工具栏按钮就可以开始写Hello, World!而在Unix下,你需要一些控制台操作的基本知识。有人也许认为Unix的环境更简洁,但习惯的力量是很大的,大家都很熟悉Windows的基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。

对于一个只懂得Windows基本操作、连DOS是什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习ls、cat等命令有趣多了,况且我们要专注于C语言本身,就不得不暂时忽略一些东西,比如编译链接的过程、Makefile的写法等等。不是说略过不学,而是后续在学。

所以小编建议初学者应该以Visual C++ 6.0或者Dev C++作为主要的学习环境,而且千万不要在IDE的使用技巧上过多纠缠,因为今后你一定要转向Unix环境的。Visual C++ 6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并不好,而Dev C++使用gcc编译器,对C99的标准都有较好的支持。

等你学完一本C语言的教材,你一定要转向Unix平台继续学习,几乎所有的C语言高级教程都是基于Unix平台的(比如《C专家编程》)。转变的过程虽然说是痛苦的,你需要面对的是各种纷繁复杂的命令,完全不同于Windows平台的思考方式,但是这种痛苦是值得的。Unix与C是共生的,Unix的思考方式和习惯更加符合C语言的思考方式和习惯。在Unix下,你可以找到无数优秀的源代码供你尽情阅读,你可以方便地查看某个库函数的联机手册,还可以看到最优秀的代码风格

归结起来就是一句话:初学C语言,建议使用Windows系统和集成开发环境,在准备向“高手”方向努力时,请先转向Unix平台。

三、万事俱备,你就是东风

书已经选择完成,环境配置完成,正所谓万事俱备,只欠你的努力了。从书的前言开始,仔细地阅读手头的教材,很多人看书喜欢直接从第一章开始看,这不是一个好的做法。前言是作者对整本书的大体简介,作者一般会告诉你需要什么基础才能够顺利阅读本书,这可以帮助你检验自己的基础知识是否已经具备。看完前言,还要浏览一下目录,了解一下书的整体结构,顺便给自己安排一下学习计划。

学习C语言,必需要注意每一个细节,书上的例子代码一定要自己亲自敲一遍,编译执行输出都跟书上说的一致才能算是学完了一个例子,如果不一致,就要仔细找原因。除了书本上有的例子,自己还要“创造”一些例子,比如学习运算符优先级的时候,可以写几个相同的表达式,在不同的位置加上括号,看看有哪些不同的行为,比如p++和(p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的书上的例子以及改造之后的例子,还有自己“创造”的例子,都应该仔细地归类保存,并且要在源代码中写上简短的注释,阐述这个例子的意图。

例子之后就是习题了,小编建议初学者把所有的习题都独立做一遍,然后对照答案的代码,看看自己的代码有那些不足,再试着修改自己的代码。很多人不重视习题,这是极大的错误,因为作者通常会在习题中说明一些重要的道理,而不是单纯地检验前面的知识。

也许你认为这样学习太慢,其实不然。学得细致就不用走回头路,等你学到后面才发现自己前面没搞清楚,那才是真的得不偿失。一般说来,整本书读完,你应该完成数千行乃至上万行的代码,无论是原封不动照抄书上的,还是自己心血来潮写就的,都是今后继续学习的一笔财富。所谓好记性不如烂笔头,就是这个道理。

仔细读书、认真抄写源代码、独立完成习题外更进一步的实验,最后将所有的代码留下,成为自己的经验和财富,绝对的辛苦,也绝对的事半功倍。当然,这种方式只适合学习需要精通的技术,如果不是学习C语言,你还要具体情况具体分析。

最后,还有非常非常重要的一点没有提及,那就是代码风格,从最开始学习就必须强迫自己模仿最优秀的代码风格。

零基础程序员快速入门C语言相关推荐

  1. 总觉得该分享点什么!零基础小白如何快速入门前端?

    1.首先零基础学习前端先要有一个计划,了解前端要学习哪些技术. 2.做好自己的时间规划,如何快速入门前端那肯定是需要不断的提高自己的学习效率,学习过程总尽量把手机调至静音给自己一个安静的学习环境和氛围 ...

  2. 零基础程序员自学编程有这 6 种方法,你的自学方法是合理的么?

    随着互联网日趋迅猛,编程已经在我们生活当中无处不在了.众所周知,程序员的工资都很不错,于是越来越多的人,都想加入到编程的行业中来.那么如何加入到程序员的行业当中? C++从入门到放弃,C语言从入门到放 ...

  3. 零基础程序员想要学好.Net,跟着这7个步骤学习就可以了

    作为一个初学者程序员,很喜欢问的一个问题就是:零基础如何自学编程?在后台也有很多读者私信我,问我这个问题,其实这个问题比较大,不是一两句就可以说清楚的. 所以,今天结合我个人的经历,跟大家分享下,要学 ...

  4. TensorFlow快餐教程:程序员快速入门深度学习五步法

    作者简介:刘子瑛,阿里巴巴操作系统框架专家:CSDN 博客专家.工作十余年,一直对数学与人工智能算法相关.新编程语言.新开发方法等相关领域保持浓厚的兴趣.乐于通过技术分享促进新技术进步. 作为一个程序 ...

  5. 零基础程序员如何花 8 个月时间获得特斯拉实习机会?

    作者 | Michaël Trazzi 译者 | 弯月 责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 2019年人工智能系统学: https://edu.csdn.net/topic/ ...

  6. 零基础程序员如何快速学会python

    学会Python能做的事情也很多,常见的就有网络爬虫,数据分析,前端开发,机器学习,都能很好地提高工作效率,往任何一个领域发展,工作前景是非常不错的. 接下来我从基本的软件安装开始,仔细的给大家分析新 ...

  7. GO 语言基础语法一 (快速入门 Go 语言)

    Go语言基础语法 一. golang 标识符,关键字,命名规则 二. golang 变量 三. golang 常量 四. golang 数据类型 五. golang 布尔类型 六. golang 数字 ...

  8. 零基础带你快速入门Ribbon技术(浅显易懂、小白都能看懂)

    xmind文档下载地址:https://download.csdn.net/download/Kevinnsm/19024681 赠(2021Java后端技术体系)下载地址: https://down ...

  9. 零基础带你快速入门consul-难道consul还能这样用?

    文章目录 一.consul的下载安装 二.框架搭建 1.创建父工程 2.创建服务提供子模块(provider-consul-module) 3.创建服务消费子模块(consumer-consul-mo ...

最新文章

  1. mysql 事务_MySQL事务
  2. mysql 5.5 5.6差异,MySQL5.5和MySQL5.6授权区别
  3. 聊聊大麦网UWP版的首页顶部图片联动效果的实现方法
  4. 五:二叉树中和为某一直的路径
  5. promise的状态值_什么是Promise,Promise的三种状态
  6. esp8266单片机透传_基于WeMos D1(ESP8266)的校园卡门禁系统
  7. java摘要_java 摘要
  8. ios android 动态更新数据类型,FragmentStatePagerAdapter支持动态更新数据
  9. 详谈RDMA(远程直接内存访问)技术原理和三种实现方式
  10. Ubuntu系统上安装微信
  11. python创建函数如何调用字典对象_我不知道如何用Python创建一个调用我函数的字典...
  12. 面向对象 之重写重载
  13. 为什么线程池里的方法会执行两次_别以为线程池很简单,来回答下这些问题!...
  14. (练打字微信小程序)把手机当成小型计算机练习打字
  15. 创建win10介质进度为0_MediaCreationTool(Win10介质创建工具) V10.0 官方版
  16. 如何使用xshell4连接自己搭建的服务器
  17. 蓝牙技术谈之调频技术(一)
  18. diskgenius扩容c盘重启电脑卡住_DiskGenius怎么给C盘扩容?DiskGenius无损调整C盘容量方法 (全文)...
  19. 智头条 | 四部门:2025年建立500家智能家居体验中心,小米发布人形仿生机器人,2022光亚展智能成主角
  20. 树莓派安装Ubuntu server无屏幕开机自动连接WIFI

热门文章

  1. 如何实现git分支变动,钉钉群里收到变动信息的通知?
  2. “股肱之臣”——Shopee 自建物流 SLS! kkgj66
  3. 磷酸里面怎么去除铁离子,特殊溶液除阳离子
  4. java 怎么创建窗体_java中创建窗体的方法
  5. Android_弹钢琴(多媒体应用)
  6. 域名备案查询 API数据接口
  7. 机器学习 实验二 决策树
  8. c语言中的向上取整函数和向下取整函数
  9. 7-1 删除字符串中的子串 (20分)
  10. python终结一个循环额_103.md · 小小懒羊羊/StarterLearningPython - Gitee.com