从Java到C的学习......最大的挑战是什么?

时间:2010-04-03 02:56:28

标签: java c

我有Java的经验,因为有些结果,我需要用C编写代码,难以从Java切换到C吗?这两种语言之间的最大区别是什么?

7 个答案:

答案 0 :(得分:13)

毫无疑问,首先,它是手动内存管理。

其次是C没有对象,因此C代码的结构往往与Java代码的结构完全不同。

编辑:一个小小的轶事:早在15年左右之前,在UNIX命令提示符下登录本地ISP时,PPP仍然很新,大学校园还有UNIX服务器上有大量的哑终端,许多人有一个名为fortune的程序,当我们登录并输出一个随机的怪异陈词滥调时会运行。有一天,当我登录阅读时,我大声笑出声:

  

C - 一种编程语言   结合了装配的力量   语言具有灵活性   汇编语言。

这很有趣,因为它是真的:C是现代计算的汇编语言。这不是批评,只是一种观察。

答案 1 :(得分:3)

也许最困难的概念是学习如何自己处理指针和内存管理。 Java基本上抽象了很多与指针相关的概念,但是在C中,你必须理解指针是如何相互关联的,以及语言中的其他概念。

答案 2 :(得分:3)

除指针和内存管理外,C不是面向对象的语言。您可以组织代码以满足一些基于对象的概念,但是您会遗漏一些功能,如继承,接口和polimorphism。

答案 3 :(得分:2)

Java有一个庞大的标准库,而C语言很小。你会发现自己一遍又一遍地重新发明各种轮子。即使您正在撰写职业生涯中的第15个链表库,您也可能会犯下之前犯过的错误。

除了数组之外,C没有标准容器,几乎没有算法,没有标准访问网络,图形,网络任何东西,xml任何东西,等等。你必须真正知道你在做什么不会意外地调用未定义的行为,导致内存损坏,资源泄漏,崩溃等等。这不适合游客。

祝你好运。

答案 4 :(得分:1)

除了标准C是非OO语言之外,标准库非常小(and in some places, just plain bad),手动内存处理的数量,完全缺乏线程实用程序(甚至多线程意识),松散的“类型系统”并且是为单字节字符集构建的,我认为最大的概念差异是你必须清楚地了解对象(或内存块)的所有权。 C)。

指定对象的所有权总是好的做法,但对于非GCed语言来说,它是最重要的。当你将一个指针传递给另一个函数时,该函数是否会占用指针的所有权,还是只是在调用期间从你那里“借”它?当你编写一个带有指针参数的函数时,你是否有理由假设指针的所有权,或者指针在函数终止后是否继续生效?

答案 5 :(得分:1)

人们已经涵盖了很大的差异:内存管理,指针,没有花哨的对象(只是简单的结构)。所以我将列出几个小问题:

  • 您必须在代码块的开头声明事物,而不仅仅是在您第一次使用它们时
  • 指针,布尔值,整数和几乎任何东西之间的自动类型转换。这是典型的C代码:if (!ptr) { /* null pointer detected */ }
  • 在任何意义上都没有边界检查,允许使用精确的指针算法。引用超出界限的事物是明确合法的:ptr2 = ptr + 10; ptr2[-10] ++;相当于ptr[0] ++;。
  • 字符串是零终止的char数组。忘记这一点和前一点会导致各种错误和安全漏洞。
  • 标题应与实现代码(.h和.c)分开,并且必须通过#include语句显式引用彼此,避免任何循环依赖。有一个预处理器,编译时宏(例如#include s)是该语言的重要组成部分。
  • 最后 - C有一个goto语句。但是,如果你曾经使用它,Dijkstra将从坟墓中升起并困扰你。

答案 6 :(得分:0)

Java是垃圾收集环境,C不是。 C有指针,Java没有。 Java方法更经常地隐式使用传递引用,而C必须明确指示何时通过引用传递。还有更多考虑因素可以肯定。