从Java到C的学习。。。最大的挑战是什么?
我有Java方面的经验,由于一些结果,我需要用C编写代码,从Java转换到C有困难吗?这两种语言最大的不同是什么?也许最困难的概念是学习如何自己处理指针和内存管理。Java实质上抽象了许多与指针相关的概念,但在C中,您必须了解指针之间以及与语言中其他概念之间的关系。Java是一个垃圾收集环境,而C不是。C有指针,Java没有。Java方法更经常隐式地使用按引用传递,而C则必须在按引用传递时显式地指示。当然还有很多需要考虑的问题。毫无疑问,首先也是最重要的是,它是手动内存管理 第二,C没有对象,所以C代码的结构往往与Java代码非常不同 编辑:一个小趣闻:15年前,当PPP还很新的时候,在UNIX命令提示符下登录本地ISP是很常见的,而大学校园里仍然有大量的UNIX服务器的哑终端,很多人都有一个叫做的程序,当我们登录并输出一个随机的极客陈词滥调时,它就会运行。有一天,当我登录一个read时,我真的笑了出来: C--一种编程语言 结合了组装的力量 语言的灵活性 汇编语言从Java到C的学习。。。最大的挑战是什么?,java,c,Java,C,我有Java方面的经验,由于一些结果,我需要用C编写代码,从Java转换到C有困难吗?这两种语言最大的不同是什么?也许最困难的概念是学习如何自己处理指针和内存管理。Java实质上抽象了许多与指针相关的概念,但在C中,您必须了解指针之间以及与语言中其他概念之间的关系。Java是一个垃圾收集环境,而C不是。C有指针,Java没有。Java方法更经常隐式地使用按引用传递,而C则必须在按引用传递时显式地指示。当然还有很多需要考虑的问题。毫无疑问,首先也是最重要的是,它是手动内存管理 第二,C没有对象,所
这很有趣,因为这是真的:C是现代计算的汇编语言。这不是批评,只是观察。除了指针和内存管理之外,C不是面向对象的语言。您可以组织代码以满足一些基于对象的概念,但您将错过一些功能,如继承、接口和变形。Java有大量的标准库,而C的库很小。你会发现自己一次又一次地发明各种轮子。即使你正在写你职业生涯中的第十五个链表库,你也可能会犯你以前犯过的同样的错误 C除了数组之外没有标准的容器,几乎没有算法,没有对网络、图形、web任何内容、xml任何内容等的标准访问。您必须真正了解自己在做什么,以免意外调用未定义的行为,导致内存损坏、资源泄漏、崩溃等。这不是为游客准备的
祝你好运。除了标准C是一种非OO语言、标准库非常小()、手动内存处理的繁琐、完全缺乏线程实用程序(甚至没有多线程意识)、松散的“类型系统”以及为单字节字符集构建之外,我认为最大的概念上的区别是,您必须对对象(或内存块,在C中)的所有权有一个清晰的概念
指定对象的所有权始终是一种很好的做法,但对于非GCed语言来说,这是最重要的。当您将指针传递给另一个函数时,该函数将承担指针的所有权,还是在调用期间从您那里“借用”指针?当您编写一个带有指针参数的函数时,假定指针的所有权对您来说有意义吗?还是指针对象在函数终止后继续存在?人们已经讨论了其中的主要区别:内存管理、指针、没有奇特的对象(只是简单的结构)。因此,我将列出几件小事:
- 您必须在代码块的开头声明内容,而不仅仅是在第一次使用它们时
- 指针、布尔值、整数和几乎任何东西之间的自动类型转换。这是典型的C代码:
if(!ptr){/*检测到空指针*/}
- 没有任何意义上的边界检查,允许使用花哨的指针算法。引用超出其范围的内容是明确合法的:
相当于ptr2=ptr+10;ptr2[-10]++
李>ptr[0]++
- 字符串是以零结尾的字符数组。忘记这一点和上一点会导致各种错误和安全漏洞
- 头应该与实现代码(.h和.c)分开,并且必须通过
语句明确地相互引用,避免任何循环依赖关系。有一个预处理器,编译时宏(如#include
s)是该语言的重要组成部分#include
- 最后--C有一个
语句。但是,如果你用过它,它会从坟墓里爬出来,缠着你goto
NullPointerException
;-)基于C语言的历史,成为汇编语言是非常有意义的。它是为编写Unix而设计的,因此它对cpu进行了严密的建模。