我该怎么学C?

时间:2008-10-08 20:18:04

标签: c kernighan-and-ritchie

我对学习C感兴趣。我读过K & R,我甚至在R和Python中完成了一些简单的C扩展工作。使用C做更实质的事情有什么值得的项目想法?任何好的在线资源,类似于Dive Into Python?特别是,资源专注于已经知道正在尝试学习C的新语言的程序员(提到诸如“在C中询问数组的长度是无意义的,你懒惰的Pythonista”)。

我的背景:

数学/统计,Python,R中的日常编程,主要围绕自然语言处理,算法等。

8 个答案:

答案 0 :(得分:15)

几年前,我的一位朋友问我同样的问题:“我如何学习C?”我告诉他要写一个设备驱动程序。

想象一下,当他真正做到这一点时,我感到很惊讶。

答案 1 :(得分:6)

答案 2 :(得分:4)

有点偏离主题,但既然你提到你的背景是在数学和统计中你应该尝试在项目欧拉。有200多个数学/统计相关问题可供解决。此外,一旦您找到解决方案,您可以查看问题论坛,了解其他人如何解决相同的解决方案。非常方便看到其他人如何解决问题......以及开机的乐趣!

www.projecteuler.net

答案 3 :(得分:4)

我和你有类似的背景。我使用Python为我的博士研究和网络编程做了大量的数学和数据分析。不同的是,我在90年代首先学习了C语言。

如果你可以为Python编写C扩展,那么我会说你对C的优点有很好的处理。在我看来,今天的C最适合两件事:

  • 编写与硬件交互的低级软件。
  • 编写执行重复,乏味,CPU密集型内容(数学,XML解析等)的代码......或许作为更高级语言的扩展。

当然,许多更高级别的应用程序也是用C语言编写的,特别是在我发现的Linux下,但在很大程度上这些并不是真正写在K& R的“裸机”C或者标准库。相反,他们使用像Glib,或wxWindows,或Apache Portable Runtime等框架,它们都使用某种面向对象的结构或约定,并经常抽象出C的一些基本内存管理细节。 / p>

所以我认为在当今的编程语言环境中使你的C技能很有用主要是做低级工作,或者熟悉这些高级框架之一。我个人非常喜欢Glib和GTK库,因为它们使用非常强大的动态面向对象模型(很像Python),而不会阻止您使用C的低级功能。

答案 4 :(得分:2)

您可以为简单的语言编写解释器。使用flex / bison。使它多线程等。这很有趣,往往会运用指针。我为school project写了类似的东西:一个简单的基于堆栈的语言,有两个不同的垃圾收集器,TwoSpace和一个并发版本。那很有趣。并且可以作为第一个比“hello,world”更大的c程序!

答案 5 :(得分:1)

退房学习C很难,这是一本免费的电子书,它带你通过很多C代码和练习的例子,以便你学习。

http://c.learncodethehardway.org/

答案 6 :(得分:0)

在日常工作中查找或定义问题并强制自己使用C而不是Python来解决问题。这将迫使你学习语言,同时将问题与你通常做的相提并论。

答案 7 :(得分:0)

实现虚拟机(例如JVM)。