我有Java的经验,因为有些结果,我需要用C编写代码,难以从Java切换到C吗?这两种语言之间的最大区别是什么?
答案 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)
人们已经涵盖了很大的差异:内存管理,指针,没有花哨的对象(只是简单的结构)。所以我将列出几个小问题:
if (!ptr) { /* null pointer detected */ }
ptr2 = ptr + 10; ptr2[-10] ++;
相当于ptr[0] ++
;。#include
语句显式引用彼此,避免任何循环依赖。有一个预处理器,编译时宏(例如#include
s)是该语言的重要组成部分。goto
语句。但是,如果你曾经使用它,Dijkstra将从坟墓中升起并困扰你。答案 6 :(得分:0)
Java是垃圾收集环境,C不是。 C有指针,Java没有。 Java方法更经常地隐式使用传递引用,而C必须明确指示何时通过引用传递。还有更多考虑因素可以肯定。