学习用C编程(来自Python)


22

如果这是问这个问题的错误地方,请告诉我。

我是一个职业的Python程序员。我很想学习C。确实,我已经尝试了很多次,但是我总是灰心。在Python中,您编写了几行,程序就产生了奇迹。在C语言中,我似乎无法做任何有用的事情。

甚至连接到Internet似乎都非常复杂。

您对我学习C有什么建议?有没有好的网站?有什么很棒的项目吗?

谢谢


4
能够站在天才的肩膀上很好,不是吗。Python解释器是用C编写的。现在您对设计人员的实际工作有了真正的赞赏。这真是太神奇了。
Pemdas

@Pemdas C通常用于创建系统程序。
Searock

我可能建议您先阅读文件的内容,然后再进行一些基本的转换,再开始创建另一个文件?示例:获取CSV并将其解析为制表符分隔的文件。或者,您可以学习如何从JPEG图像文件的BMP中读取标头信息。
约书亚伯恩斯

我要补充一个答案,但是这里有在线C for Python程序手册。另外,“以硬方式学习编程”的开发者正在编写一本书,名为“ 以硬方式学习C ”,该书的目标读者是已经了解python或类似知识的人。
naught101 2014年

Answers:


31

不要气disc。

Python是一种高级编程语言。与C相比,它可以用很少的代码产生奇迹不要一开始尝试模仿C语言中的Python结果-您会很快灰心。用C语言进行编程需要不同的思维方式和理解方式,因为当您与计算机进行更紧密的交互时。这是学习C的一个很好的起点:

图书

在线资料


1
您可以建议编程练习吗?最好有用的东西。谢谢。
Honza Pokorny 2011年

12

如果您想学习C,请不要先连接互联网。您可以使用任何其他语言来执行此操作。在C语言中这不是最重要的。

相反,请看一下本C教程中的指针,数组,引用,结构。这将帮助您了解内存管理以及“使您与计算机更加接近”的许多功能。

如果您可以学习和理解该材料,请考虑将其扩展到可能的项目中。这些概念是任何真正的专业C编程的基础。

指针教程看起来也很有帮助。


C_Tutorial链接被打破......
user3768495

11

非常复杂的连接到互联网!考虑一下:

  • 您的计算机可能具有多种连接方式-WLAN,蓝牙,以太网等。每种连接都有自己的设置,需要进行设置。你是幸运的,有已经标准和驱动这些......使用这些可能是一个很大难度比它已经是现在。

  • IP地址可以是IPv4或IPv6,并且您需要能够同时处理这两个地址。

  • 可能为系统配置了代理,也可能没有。

  • 您必须支持FTP,HTTP或其他协议。

  • 您可能需要使用拨号,因此,如果尚未连接,则必须指定带有密码和电话号码的电话簿。与WLAN用户名/密码同上。

  • 您可能需要使用cookie。

  • 系统可能会缓存一些数据,所以您是否要使用缓存?

这样的例子不胜枚举。

因此,使用Python轻松实现这些事实必然意味着其中许多隐藏在您的面前(或者很难设置),因此您将简单性换成了力量。C库则相反:它具有所需的全部功能(可以轻松地执行系统调用),但没有任何默认值(实际上,也没有任何用于连接到Internet的功能)。

不要将C视为乏味,而应将其视为强大的。但是无论如何,不要尝试通过它连接到互联网-这是一件相当困难的事情。相反,开始学习如何将库用于更多基本任务(例如文件I / O),了解指针和数组的实际工作方式,并在学习了所有这些内容尝试处理大型项目。您也将更喜欢Python。:)


编辑

我个人建议,如果您有空闲时间,请先学习C#。熟悉它之后,就开始学习有关unsafe关键字以及如何使用指针以及如何在C#中进行封送处理的知识。与Python一样,您仍然可以使用非常大的库,但是您可以做很多可以在C中完成的事情。然后手动转换为调用系统API(例如InternetOpen),并学习如何让他们工作。您仍然具有很大的灵活性,但是您将对低级概念有很好的介绍。完成这些之后, 开始学习C-然后您会发现它简直是小菜一碟,您会看到(C?得到它吗?)高级语言和低级语言的优缺点,并且您将能够找到适合您需求的产品。

也就是说,我认为一个速成班用C为起点跳进可能是有用的 C.


8

在学习C时,不要读内核代码。它充满了技巧,可以从中挤出所有最后的性能。其中一些是非常不标准的。它会让你发疯。

相反,请看一些小的,高质量的项目:

  • Lua-如果您对编程语言不感兴趣,则可能要跳过此语言。否则,这确实是非常漂亮的代码,并且看到它们用很少的钱就可以完成很多事情(因为您来自Python,因此您似乎对此感到沮丧)。
  • ZeroMQ-我喜欢这个项目。这是一个轻量级,超快速的消息队列。同样,高质量的东西。
  • DarkHttpd -C中的2700行Web服务器。涵盖了一些有趣的主题,例如套接字编程,解析和使用协议。

0

高级语言的目的之一是隐藏复杂的事物。如果您想学习“低级”语言,并且不想从真正复杂的事情开始(这些东西以前大多对您来说是隐藏的);尝试从一些更简单的学习项目开始,对数字数组进行排序,或反转一串字符,等等。

采取小步骤走上陡峭的山坡比较容易。



-3

首先学习C语法,然后用它编写数据结构和算法。当然,您可以使用专业的C语言阅读Linux内核。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.