Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何学习C语言?_C_Kernighan And Ritchie - Fatal编程技术网

我应该如何学习C语言?

我应该如何学习C语言?,c,kernighan-and-ritchie,C,Kernighan And Ritchie,我对学习C很感兴趣。我读过,甚至在R和Python中做过一些简单的C扩展工作。用C做一些更实质性的事情,有什么值得一提的项目想法?有什么好的在线资源,类似于?特别是,资源集中在那些已经了解新语言的程序员身上,他们正在尝试学习C语言(其中提到了“在C语言中要求数组的长度是胡说八道,你这个懒惰的Pythonista”) 我的背景: Math/stats,Python、R中的日常编程,主要围绕自然语言处理、算法等 看一看 在日常工作中发现或定义一个问题,并强迫自己使用C而不是Python来解决它。这将

我对学习C很感兴趣。我读过,甚至在R和Python中做过一些简单的C扩展工作。用C做一些更实质性的事情,有什么值得一提的项目想法?有什么好的在线资源,类似于?特别是,资源集中在那些已经了解新语言的程序员身上,他们正在尝试学习C语言(其中提到了“在C语言中要求数组的长度是胡说八道,你这个懒惰的Pythonista”)

我的背景:

Math/stats,Python、R中的日常编程,主要围绕自然语言处理、算法等

看一看

在日常工作中发现或定义一个问题,并强迫自己使用C而不是Python来解决它。这将迫使您学习该语言,同时使问题与您通常的操作相关。

实现一个虚拟机(例如JVM)。

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


想象一下,当他真的这么做时,我会感到惊讶。

你可以为一种简单的语言编写一个解释器。使用flex/bison。让它成为多线程的,等等。这很有趣,而且经常使用指针。我为a写了类似的东西:一个简单的基于堆栈的语言,有两个不同的垃圾收集器,TwoSpace和一个并发版本。那很有趣。作为第一个比“你好,世界”更大的c程序是可行的

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


我的背景与你相似。我使用Python为我的博士研究和web编程做了大量的数学和数据分析。不同的是,我是在90年代第一次学习C语言的

如果你能为Python编写C扩展,那么我想说你对C的用途有很好的理解。在我看来,C今天最适合做两件事:

  • 编写与硬件交互的低级软件
  • 编写重复的、乏味的、CPU密集型的代码(数学、XML解析等)。。。也许是作为更高级语言的扩展
当然,很多高级应用程序也是用C编写的,特别是在我发现的Linux下,但在很大程度上,它们并不是用K&R的“基本”C或标准库编写的。相反,它们使用Glib、wxWindows、Apache可移植运行时等框架,这些框架都使用了某种面向对象的结构或约定,并且常常抽象出C语言的一些基本内存管理细节


因此,我认为,在当今的编程语言环境中,让您的C技能发挥作用主要在于做低级工作,或者熟悉这些高级框架之一。我个人非常喜欢Glib和GTK库,因为它们使用了一个非常动态的面向对象模型(非常像Python),而不妨碍您使用C的低级功能。

请查看《艰苦学习C》,这是一本免费的电子书,它带你通过C代码和练习的许多例子,以便你学习


好吧,现在我感到非常尴尬。所以,谷歌的搜索引擎完全让我失望!谢谢你的提示。我认为这是一个很好的一般性建议,但对我来说,我认为会适得其反,因为我在日常工作中使用高级语言是有原因的:)是的,这是当今C语言的一个大问题:)理解它仍然是有用的,在某些事情上使用它是至关重要的。。。但是如果你花更少的时间使用一些东西,你很可能会更有效率。谢谢你的建议,丹。我发现,当我有一些用C语言编写的程序,而我正试图将其应用于扩展时,缺乏C-fu对我的伤害最大。也许这只是科学/学术程序员的问题,但我发现这些程序最让人困惑的是C语言。是的,很多为解决特定学术任务而编写的程序都写得非常糟糕。。。尽管算法和目标非常出色,但它们是非常狭隘而匆忙地拼凑在一起的。我知道在这方面我和下一个男人一样有罪:-/我终于开始做这些了,它们很有趣!除了论坛之外,如果他们有一个按语言分类的解决方案档案(用于解决问题的时候),那就太好了。我前一段时间迷上了它。虽然我还没有完全解决这些问题,但当我有空闲时间时,这确实是一个巨大的挑战。正如我在3.5年前接受的(第一个)答案中所指出的,可能是重复的:)彼得·范·德·林登(Peter Van Der Linden)的专家C编程非常好而且有趣。这本书写于1994年,但它仍然是最新的。