C语言与Java的异同

作者:终南

自工作以来,先用VB、ASP这些编程;后来转用Java,对面向对象的语言有了些许了解,如今又主要用C语言写一些代码。由于学校的时候学过一些C语言的知识,后来也大略写过一些几百行简单程序,因此这段时间来,对C的上手也算比较快速。

面对的所有东西都可谓博大精深,更何况那么多人使用的Java以及历史悠久的C语言。不过手之所至,按键不由此起彼伏,便有了对C语言和Java的一些感悟。

相同的地方:

1、语法类似:

由于Java可以算是从C++发展而来的,因此Java与C语言的语法比较类似

2、编程的熟练程度就是对语言程序库的掌握程度:

从某种程度上来说,编程语言都是由语法和相应的程序库所构成,Java有自身的类库,C语言则有标准库。所谓的编程,就是使用与语法来调用和组合程序库中的函数。

不同的地方:

1、内存管理

在Java中,基本不用考虑内存的问题,如果想用一个对象,new一个就可以,这个过程的背后则是JRE为对象分类的一定内存,当JRE发现你不再使用这个对象的时候,他就会自动回收内存,也就是说你只管借东西,不用管归还,因为与有人当你的跟班,在你不使用的时候就把东西归还了,不过这个过程还是有的,只不过是JRE作的而已。

但是C则不同,如果你想用,你可以用malloc之类的方法申请内存,当你使用完了,因为没有跟班的,你需要自己把这块内存归还回去,也就是调用free方法来完成这个任务。由于需要显式的归还内存,因此当一个函数需要将一块内存返回给调用者的时候,问题就比较复杂了,不如面向对象和具有内存回收功能的Java那么直观了。对于这个问题,在C语言中,有几种解决方案:

(1) 在调用者中先分配好内存,作为参数传入到被调用的函数中

(2) 在被调用的函数中分配,使用完后在调用者中释放

(3) 在被调用函数中使用static变量,可以将该变量返回

2、面向对象

Java的面向对象的特点很明显,而C则是一个地道的结构化语言。 Java中有一个字符串类String, 通过调用 String.length()就可以知道字符串的长度,但是在C语言中,则需要调用函数strlen(str)来得到字符串(字符数组)的长度。由于C不是面向对象的语言,也就没有this的概念,因此当使用一个与某个“东西”相关的函数时,就需要不厌其烦的将代表这个“东西”的变量作为参数传递进去。

3、名称空间

Java通过包(package)来实现名称空间,在C语言中,所有的函数都处于同一名称空间,也就是没有名称空间,因此就会很多程序提供的api接口函数都有一个前缀,例如MYSQL的mysql_init(), mysql_real_connect(), mysql_real_query()等函数名称前面的mysql_。

附:C语言编写的split函数,从中可以看看C的内存管理

#include #include #include

char **split(char *str, char *delim)

{

static char **str_arr = NULL;

static char *cstr = NULL;

if (str_arr)

{

free(str_arr);

str_arr = NULL;

}

if (cstr)

free(cstr);

cstr = (char *)calloc(strlen(str)+1, sizeof(char));

strcpy (cstr, str);

char *p;

int n = 0;

p=strtok (cstr, delim);

while (p!=NULL)

{

n++;

if (str_arr == NULL)

str_arr = (char **)malloc(sizeof(char *));

else

str_arr = (char **)realloc(str_arr, n * sizeof(char *));

str_arr[n - 1] = p;

p=strtok(NULL, delim);

}

str_arr = (char **)realloc(str_arr, (n+1) * sizeof(char *));

str_arr[n] = NULL;

return str_arr;

}

int main ()

{

char *str = "Please split this phrase into tokens";

char *delim = " ";

char **str_arr ;

str_arr = split(str, delim);

while (*str_arr)

{

printf("/t%s/n", *str_arr);

str_arr++;

}

return 0;

}

java和c语言语法上相同,C语言与Java的异同相关推荐

  1. python与c语言在语法上的区别-论c++/java/c 与python的语法上的区别

    复习C/C++.Java语言知识,结合Python语言知识,结合实例代码说明C/C++.Java与Python的区别(综述题). 要求: 至少列出十点以上区别: 要求每点说明时要结合示例代码: 严禁抄 ...

  2. 怎么在vs code上编写C语言,VScode上配置 c语言环境的图文教程

    成成最近用到C语言了,之前比较喜欢用在vscode上面用python调试,今天我参考了一些文章,也尝试了下在vscode上配置c语言的调试,其中包含一些相关的基础知识. 1.在vscode里面下载c/ ...

  3. ubuntu安装java依赖,在Ubuntu 16上安装R语言 - 未满足的依赖项

    按照站点[here]上的说明安装R语言 . 在安装过程中,我使用apt-get install命令在r-base组件上收到错误" unmet dependencies " . 请参 ...

  4. c语言语法糖公式,C语言一些语法糖

    2019独角兽企业重金招聘Python工程师标准>>> 语法糖可以提供方便,让程序员少写几行代码,让代码看起来简洁.不过有时语法糖不如多个语句组合灵活. for循环 维基百科&quo ...

  5. java 死锁演示_史上最通俗理解的Java死锁代码演示

    死锁的概念 知识储备 对象锁:Java一切皆对象,每个类都有一个class文件.由class文件可以new出对象,我们简单认识 下java对象,对象有个对象头信息,也就是这个对象概述,其中一条信息就是 ...

  6. java语言开发手机游戏_手机上的JAVA游戏和JAVA软件,是电脑上的JAVA语言编写的吗?他们之间有什么联系...

    手机上的JAVA游戏和JAVA软件,是电脑上的JAVA语言编写的吗?他们之间有什么联系以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起 ...

  7. C语言学习完后,C++与Java我应该怎么选择

    到底选择C++?Java??还是侧开??? 网上最近流传于一个段子想必大家不少人都或多或少的接触过,或者听过: 有后选后,无后选前,无后无前,算法也甜, 条件允许,无脑后端,前途无量,预定高管, 其次 ...

  8. JAVA基础再回首(一)——基本概念、JAVA开发工具、JAVA基本语法

    JAVA基础再回首(一)--基本概念.JAVA开发工具.JAVA基本语法 学了java,做了android应用开发,现在回想起来,真的是一路坎坷..我在上章博客中提到了我以后的几个学习计划和目标就是把 ...

  9. c语言系统关键字6,C语言语法之关键字

    由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char ...

最新文章

  1. ASIA TODAY 英文版
  2. 阿里云牵手东华软件拓展智慧城市
  3. quartz 动态添加job_SpringBoot+Quartz实现动态管理定时任务
  4. UA PHYS515A 电磁理论V 电磁波与辐射3 偏振
  5. 如何诊断crs 安装时 root.sh 脚本执行错误
  6. MySQL 4种text类型的最大长度
  7. java线程同步的实现_Java并发编程(三) - 实战:线程同步的实现
  8. 更方便地模拟 Http 响应
  9. webview img照片旋转_Python图像处理,照片去色、翻转、模糊、缩略图统统搞定
  10. 【mac】Mac 安装Brew命令
  11. PHPCMS 模板标签
  12. 高中信息技术学业水平考试真题知识点
  13. linux查看ftp默认端口,linux系统如何修改ftp默认端口(图文)
  14. 「ZigBee模块」协议栈-串口透传,打造无线串口模块
  15. python绘制基因结构图_使用TBtools绘制进化树+motif分析+基因结构~三图合一
  16. essay--网络常用省略语大全(ZT)
  17. 既然选择了远方,便只顾风雨兼程
  18. DeFi新玩法丨一文教你玩转NFT碎片化协议Fractional
  19. 三峡学院计算机调剂,重庆三峡学院2019考研调剂信息公告
  20. 利用公式实现RGB图转化为灰度图

热门文章

  1. 200个年轻人的薪资观:真讨厌赚钱,耽误我开心
  2. 教育平台项目后台管理系统:接口文档
  3. 教学目标四个维度_扎实教学基本功,四度课堂来切磋 ——首届四度课堂语文教学基本功比赛...
  4. 微机原理——知识点总结
  5. 裸K的两种主要入场方式
  6. JS+CSS+HTML购物车详解实现购物车完整功能(附效果图,完整代码)
  7. WinDBG技巧:列出当前进程所有装载的模块(DLL/EXE)
  8. GT I9082 刷机的过程
  9. Classloader、NIO ByteBuffer.allocateDirect的回收 、一致性Hash
  10. STM32F4(用SysTick实现Delay函数)