C for Java Programmer?
可能的重复:
我应该在学习C++之前先学习C吗?
作为一名专业的(Java)程序员和重度Linux用户,我觉得我有责任学习一些C(即使我可能永远不会专业地使用它),只是为了让我成为一个更好的程序员。
两个问题:
我应该先尝试C还是C++ - 我意识到它们是具有一些共同点的不同语言。学习两者是否有用,或者只是尝试一个?我听说C++有点像一种语言的噩梦巨兽。
对于像我这样的Java开发人员来说,最好的资源(书籍,教程,练习程序,参考代码)是什么。
谢谢
可能的重复:
我应该在学习C++之前先学习C吗?
作为一名专业的(Java)程序员和重度Linux用户,我觉得我有责任学习一些C(即使我可能永远不会专业地使用它),只是为了让我成为一个更好的程序员。
两个问题:
我应该先尝试C还是C++ - 我意识到它们是具有一些共同点的不同语言。学习两者是否有用,或者只是尝试一个?我听说C++有点像一种语言的噩梦巨兽。
对于像我这样的Java开发人员来说,最好的资源(书籍,教程,练习程序,参考代码)是什么。
谢谢
C语言简单易学,难以掌握,作为Java程序员,障碍将是内存和结构。并消除Java可能对产生大脑部分;)的算法造成的损害
我建议通过互联网上的教程来熟悉Linux盒子上的GCC工具链。然后阅读C编程语言,Linux应用程序开发的副本不会有什么坏处。此外,在Linux上,glib将使您免于重新发明轮子...但至少尝试创建自己的链表,哈希图,图形和其他API来学习。指针算术、数组和学习结构等元素只是二进制块中的命名偏移量都很重要。花时间与 和 和 记忆检查。使用C,您的工具和工具链非常重要,IDE在学习时不一定是您的朋友。mallocfree
我会选择C而不是C++因为C是习惯C的内存管理和指针使用的良好基础。
你能做的最好的事情就是把你学到的东西应用到一个真正的项目中。但要准备好把你的头撞在Valgrind和GDB的墙上。我已经编程C多年了,我仍然不是C僧侣。
我同意C是一门伟大的语言,它显示了一个糟糕的程序员。但请记住:
任何足够复杂的C程序都包含一个临时的,非正式指定的,错误缠身的,缓慢的实现的一半Common Lisp。
它的寓意是也学习其他语言,而不仅仅是C派生的语言!考虑一些Lisp方言,Erlang(目前很酷),Haskell等。它们将从Java的2x2单元扩展您的视野。考虑一下SICP。
来自ASM,C,然后C++,最后(被迫)进入Java领土,我想我可以就这个主题提供意见。
首先,尽管对Java社区有充分的尊重,但业务经验表明,虽然C/C++程序员可以习惯Java原则和编程(这可能不那么容易),但相反的情况很少发生。换句话说,一个C++程序员将不得不学习和应对大量的Java规则(框架......),但她最终(并且通常)能够通过将大量的系统经验注入到流程中来产生长期工作代码。一个Java程序员去C,习惯了更多的理论原理,严格的结构规则可能
所以,现在,我的任务是帮助你在学习C / C++之前感到安全,自信和动力!
我的建议是从C开始,因为
例如,在C研究中,我要强调的是
指针Java当然使用指针,但在实际将类作为指针传递给方法时隐藏其访问权限。在 C 语言中,您必须了解 by 和 by 之间的区别。此外,和 之间更细微的区别。指针通过数组等是多么方便,你知道或.关于指针已经说了很多,我的建议是valuereferencechar x[3]char *x = "ab"*++x*x++
typedeftypedef int *pointerToIntpointerToInt piint *pi记忆当你需要内存时,你分配它,当你不再需要它时,你释放它。容易。问题是分配适当的金额,而不是两次释放它......必须习惯这一点。并习惯堆,堆栈...当您的程序运行并寻址 NULL (0) 时,您可能会遇到明显的异常。也许不是。
数据结构所以你想使用一个方便的哈希地图吗?当然,在你开发它之后。或者你可以链接一些库来做那种事情,只是选择了正确的一个。公平地说,当用C语言编程时,你[必须]以不同的方式思考,并且可能会找到比给定问题的映射更合适的算法。
总而言之,一开始你会感到迷失方向,但最终(除非你做噩梦),你会发现在你面前有很多乐趣和娱乐的空间。C允许一个人完全自由地编程:C按照你的想法进行编程,而不是相反。