热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

新手入门选什么:有些人说C语言要比Java更难!你应该怎么办?

从学习角度上说,很多人认为C语言单纯简单,其实比Java要容易。我认为,如果要把本质学懂,确实如此,而且在学

从学习角度上说,很多人认为C语言单纯简单,其实比Java要容易。

我认为,如果要把本质学懂,确实如此,而且在学懂C语言的基础上再学Java的人往往会获得很好的效果。

Java中由于隐藏了内存分配的处理,反而不如C语言在内存管理上来的直观。

从应用角度上说,还是Java要容易很多的。

主要体现在以下几点。

1.内存管理

C语言需要自己申请内存,自己归还内存,总之什么事儿都得自己操心。你得记得自己在哪里借了内存,还 得搞清楚自己现在这个指针是指向Stack里的内存还是Heap里的,Stack里的还得记得啥时候作用域没 了……总之,步步惊心,一不小心就要年底被黄世仁讨债了。

而Java的内存管理,有了垃圾回收这个大妈帮着管了,你就只管借不用管还了。用完了往门口一扔,到时候自己就有人来拿回去了。

2.应用库

C语言相关的应用库也不能说不多,但比较杂,而且由于C语言的应用领域跟Java本身就不一样,所具有的应用库也不同。从说明来看,主要是指Web开发。那么要用C语言写一款应用服务器的话,通常可能要自己来学习HTTP协议、XML/JSON解析、还要自己研究内部的路径路由……总之一大堆破事儿等着 处理。 Java在这方面优势要明显很多。

你提到的JavaEE,Struts2,Hibernate,Spring等等都是现成的框架,你只需要按照框架规定填写业务逻辑就好了。解析HTTP协议之类的底层处理,框架都给你做了。所以,这里你的问题里提的不对等,C语言不学这些,只是老师没打算让你用C语言做Web应用罢了。如果做,你要学的知识会成倍增长的。

3. 跨平台

C语言是不具有二进制级别的跨平台性的。你在Linux上使用C语言和在Windows上使用C语言,所用到的编译器不同,涉及到与系统相关的调用,涉及到的函数、数据结构都会不同。这让C语言在跨平台开发的时候工作量成倍增加。不仅仅是跨操作系统,即便是同一种操作系统,总线位数不同,也会影响C语言的表现。

早期电脑都是16bit的操作系统(当然更早期还有8bit等更古董的),后来普及了32bit,现在基本都过渡到了64bit。每次升级,都可能让很多当年设计的不是很好的C语言代码完蛋。

Java语言自诞生之日起就以跨平台为宣传口号。虽然实际效果没有宣传的那么美好,但也确实大大降低了开发工作量。虽然随之而来的性能问题也一直被各方面诟病。在跨平台上,Java的优势极其明显。

为什么说 C 语言比 Java 难?

C语言的规则相对简单,规矩相对少。而这恰恰加大了使用难度。

围棋和象棋比较,围棋的规则相对简单,就两种棋子,棋盘上哪里都可以放子,一片子没有气就死了。虽然为了解决争议还有例如打劫之类的规则,但比起象棋兵种众多,每个兵种移动方式还不同,遇上国际象棋那种同一个兵种走路和杀人的时候步法还有差异的,动不动老王跟城堡就瞬间移动一下的规则,围棋的规则不可谓不简单。

然而,AI在象棋上战胜人类是在1997年,AI在围棋上战胜人类是在2018年?我觉得是否真的战胜了可能目前还有争议。足可见两者难度的差异。 C语言和Java也是类似的,越是规则简单的C语言越是难以掌握。

综上来看,C语言在使用上的难度要大大高于Java。在学习时,因为计算机是一门使用科学,如果学了不会用,基本等于没学,所以最终还是会落到使用难度上,如果要学到能做出同类东西的水平,自然是C语言难度要大一些了。

但是C语言的重要性依然还是不言而喻,作为编程语言的基石语言,想要深入了解编程,想要学习其他编程语言,你在先学好C语言之后,再入手学习其他编程语言就是相当于你掌握了武学的精义,其他的你都能够快速的掌握学习。

是我的个人经验分享,谢谢你的阅读,希望能帮到你呀!


大学想提升你的编程能力,成为一个强大的程序员找到一份好工作吗?不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
author-avatar
至尊白云_878
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有