C语言与Java的异同

作者:终南   <li.zhongnan@hotmail.com>

自工作以来,先用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 <stdio.h>
#include <stdlib.h>
#include <string.h>

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;
}

C语言与Java的异同相关推荐

  1. java和c语言语法上相同,C语言与Java的异同

    C语言与Java的异同 作者:终南 自工作以来,先用VB.ASP这些编程:后来转用Java,对面向对象的语言有了些许了解,如今又主要用C语言写一些代码.由于学校的时候学过一些C语言的知识,后来也大略写 ...

  2. python语法与java语法的区别_Python语言与java语法的异同之处

    本文主要向大家介绍了Python语言与java语法的异同之处,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.变量 java中定义变量,int a=0;而python中为 a= ...

  3. java语言的实现机制_JAVA语言之Java NIO的工作机制和实现原理介绍

    本文主要向大家介绍了JAVA语言之Java NIO的工作机制和实现原理介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 前言 本文只简单介绍NIO的原理实现和基本工作流程 I/O和 ...

  4. 怎么用python画个电脑_python语言还是java如何用python画爱心

    用python绘制爱心的基本步骤如下: 002pc.com对<python语言还是java如何用python画爱心>总结来说,为我们学习Python很实用. 首先先下载安装好python程 ...

  5. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  6. 【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )

    文章目录 一.以动态特性编译的 Groovy 类 二.Groovy 语言与 Java 语言执行效率对比 三.以静态特性编译的 Groovy 类 一.以动态特性编译的 Groovy 类 Groovy 类 ...

  7. 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写

     1  案例场景,通过C语言回调Java的代码,案例的最终界面: 2  案例的代码结构如下: 3 编写DataProvider的代码: package com.example.ndkcallbac ...

  8. JNI基础 c语言调用java方法

    利用c语言调用java无参的方法 java方法 com.example.jniparsedata.ParseData类中的方法     //打印     public void sayHelloFro ...

  9. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

最新文章

  1. 数据中心基础设施:建设与设计
  2. 使用 Arthas 排查 SpringBoot 诡异耗时的 Bug
  3. 一个敏捷教练成长必备的8项技能
  4. Jquery实现 TextArea 文本框根据输入内容自动适应高度
  5. Java怎么按照字母对单词排序_将一段字符串文本中的每个单词提取出来后按照字母顺序排序...
  6. /build/tools/caffe.bin工具简析
  7. 2021-08-03 SELECT简单查询
  8. 十一、JAVA接口的定义和使用
  9. mongodb数据结构学习1--增删改查
  10. excel countifs 计算包含了空白单元格,结果错误,不对,特别大。
  11. unbuntu 安装nginx
  12. Debian 9 Stretch国内常用镜像源 Jason-张百万
  13. Deep-learning augmented RNA-seq analysis of transcript splicing | 用深度学习预测可变剪切
  14. MAC地址和IP地址
  15. 创业者必知的互联网思维之屌丝思维
  16. mysql ndb存储引擎_NDB存储引擎 | 学步园
  17. linux的文件服务器
  18. mysql员工星期排班表设计_excel表格怎样制作排班表 星期和月份快速填充,来看看吧...
  19. 选型帮推荐:上海音锋机器人【托盘四向车】
  20. 区块链时代正开启 中原精英探讨区块链未来 ----2018华中首届区块链论坛郑州开幕

热门文章

  1. 手推遗传算法(Genetic Algorithm,GA)的详细步骤图解
  2. c++学习笔记-二进制文件操作(哔站-黑马程序员c++教学视频)
  3. win10升级后CFT加载程序占用CPU高解决办法
  4. 使用正则表达式查找Word文件中AABB和ABAC形式的成语
  5. truncate()函数
  6. 智能匹配 — 百度SEM
  7. 代码改变生活-文件重命名
  8. 结合电压采样电路介绍RC滤波电路
  9. 数据湖与数据仓库:主要差异
  10. 【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?