"内存动态分配-C程序设计经典版谭浩强"
需积分: 9 74 浏览量
更新于2024-01-17
收藏 8.66MB PPT 举报
谭浩强经典版的《C程序设计》一书中提到,在内存动态分配存储空间的情况下,我们需要根据实际需要开辟空间,而不是像在定义变量或数组时所做的那样,在内存为其开辟指定的固定空间。在程序中,例如输入学生成绩时,每个班的学生人数不同,因此需要根据不同的情况开辟不同的空间。一般情况下,为了确保能够容纳所有可能的情况,我们可能会将空间定义的很大,以防止出现内存不足的情况。然而,一旦定义了固定地址的空间,这个空间就不能够被其他变量所占用,在内存中无法被重新利用。
随着计算机的应用领域不断扩大,计算机技术也得到了高速发展。计算机硬件和软件都在不断日新月异,而作为应用计算机的一种工具,程序设计语言也在不断地得到充实和完善。自从1946年第一台电子数字计算机ENIAC问世以来,每年都有新的程序设计语言问世,而老的程序设计语言也在不断地更新换代。
在20世纪60年代,Martin Richards为计算机软件人员在开发系统软件时开发了BCPL语言(Basic Combined Programming Language)作为记述语言使用。1970年,Ken Thompson在继承BCPL语言的许多优点的基础上发明了实用的B语言。到了1972年,贝尔实验室的Dennis Ritchie和Brian kernighan在B语言的基础上开发出了C语言。C语言的出现在当时引起了很大的轰动,因为它具有易于学习、高效、灵活等特点,很快就成为了当时最流行的程序设计语言之一。
C语言的设计充分考虑了程序员的需求,当时的计算机资源非常宝贵,因此C语言的设计也非常注重在尽可能少的资源下完成更多的工作。C语言提供了大量的操作符和控制语句,让程序员能够更加灵活地开发程序。C语言还提供了丰富的库函数,这些库函数能够提供大量的常用功能,从而能够减少程序员的工作量,提高了程序的开发效率。C语言的出现极大地推动了软件开发的进程,它的灵活性和高效性是其他的程序设计语言所不能够比拟的。
随着C语言的不断发展,程序员提出了更高的要求。C语言在一开始是完全面向过程的,但是在软件开发的过程中,程序员渐渐发现这种编程方式有很多局限性,尤其是在大型工程中,程序的可读性、维护性和扩展性都很差。为了解决这些问题,人们开始思考是否有一种更好的方式来组织程序。这就是面向对象的编程思想。
面向对象的编程思想是从现实世界的事务中抽象出来的,它将事物看做是对象,而对象的行为和属性则通过方法和属性来体现。这种思想大大提高了程序的可维护性和可扩展性。C++语言就是一种面向对象的程序设计语言,它在C语言的基础上增加了一些新的特性,支持了面向对象编程的特性。C++语言快速地占领了市场,而且在当时几乎是所有软件工程中的首选语言。
然而,面向对象的编程思想并不仅仅能够满足程序员的需求。在实际的软件开发中,出现了更多的需求:软件需要更大的规模、更高的可靠性,软件也需要更多地进行并发处理。因此,人们需要一种既能够支持面向对象编程,又能够支持更多的需求的程序设计语言。这就是Java语言的出现。
Java语言是一种全新的程序设计语言,它在很大程度上汲取了C++语言的优点,同时又克服了C++语言的缺点。Java语言是一种面向对象的、平台无关的、分布式的、多线程的、动态的程序设计语言。它不仅具有C语言的高效、灵活等特点,还具有C++语言的面向对象编程特性。与C++语言相比,Java语言有着更好的可读性、更高的可维护性和更好的扩展性。
在今天,Java语言已经成为了最流行的程序设计语言之一,它被广泛地应用于企业级应用、互联网应用和移动应用的开发中。
总的来说,程序设计语言的发展经历了很长的历程。从最初的BCPL语言到今天的Java语言,程序设计语言不断地更新换代,不断地得到充实和完善。它们的出现极大地推动了软件开发的进程,提高了程序设计的效率,改善了软件的质量,推动了信息技术的快速发展。期待未来,程序设计语言一定会不断地得到更新和完善,以更好地满足程序员和软件开发者的需求。
点击了解资源详情
2011-04-18 上传
2014-11-15 上传
2008-01-04 上传
2011-02-08 上传
2010-12-23 上传
ServeRobotics
- 粉丝: 37
- 资源: 2万+
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器