当前位置: 首页 > news >正文

C语言被创造出来的基础是什么?它的主要结构是什么?

c 是一种简单的语言。

它真正提供的只有有宏、指针、结构、数组和函数。

不管什么问题,c 都靠宏、指针、结构、数组和函数来解决。

c是一种相对低级的语言,这就是说它可以处理对机器的一些操作。

c的指针提供了独立于机器的地址算术。

c没有很强的类型机制,虽然标准c加强了类型检查,但是比起Java或者c++,它的类型机制都不强。

这带来很大的灵活性的同时也带来了很多的问题。

c不提供直接的如字符串,集合,列表和数组等复合对象的操作。

它不能处理整个数组或者字符串的操作。

例如不能直接对整个数组进行比较。

除了由函数的局部变量提供的静态定义和堆栈外,它没有任何存储分配工具;也不提供堆和无用内存的回收。

也没有输入输出工具,没有read和write语句,也没有内部文件访问方法,所有这些都必须由函数调用来完成。

幸好标准c函数库提供了这些函数,要不然使用c的难度真的太大了。

由于它真正提供的东西很少,很多事情我们必须自己考虑。

如内存的操作,数据的抽象和组织。

而c++除了宏、指针、结构、数组和函数外,至少还提供了函数重载、缺省参数、自定义操作符、内联函数、引用、模板、异常、名字空间,等等。

所以用c++比用c 具有更宽广的空间,因为设计时有更多的选择可以考虑,因此c++也称为更好的c。

但这样简单的c却给我们带来很大的灵活性,可c语言的难也就难在了它的灵活。

人们说指针难,数组难操作,其实根本还是在于它太灵活。

对于数组和字符串操作,c++提供了模板,对于一些c语言里容易出现的错误如:数组越界,字符串结尾的空字符丢失等,c++可以定义类和重载解决这些问题,但在c语言这一切必须依靠我们的经验和细心。

因此对于我来说我并不推荐学习的第一门语言就是c语言,我希望在得到一些结构化编程的训练后再去学c语言。

这样当你在学习的时候就可以专注于c的那些烦人的陷阱和讨厌的低级操作。

而不用费很多心思在结构化编程的细节上,比如:循环次数(初学者很容易出现少一次或多一次这样的错误),清晰的选择结构(即使是编程高手也不见得把程序写的很清晰)。

如果你想直接学习c,那么也是先把它的语法熟悉,然后再去深入它的低级特性。

总结的说来,学习c语言就是要多写程序,多调试,多看代码,理解它的特点和工作方式,然后用c语言思考问题。

原文地址:https://www.weidianyuedu.com/content/4020553767349.html

相关文章:

  • error: Unexpected console statement (no-console) 解决办法
  • 神经系统分类和组成图表,神经系统的组成概念图
  • [Swift学习] 访问控制 Access Control, private、public、filePrivate等修饰符
  • [SQL]数据库语言学习
  • 软考高频考点——项目中标了以后该怎么做?
  • 基于注意力机制的LSTM液体管道非稳态工况检测
  • Oracle VM VirtualBox安装CentOS 7系统
  • windows hello人脸识别设置没反应的解决办法
  • 企业级容器云PaaS解决方案【厚PaaS+轻应用+微服务】---(2)
  • dubbo 利用分组区分同一个服务的不同实现
  • npm下载的包分类
  • 在绩效评估中使用 360 反馈
  • Object Detection in Optical Remote Sensing Images: A Survey and A New Benchmark
  • 学会这招,轻松实现批量PDF转jpg,快来码住
  • GIS海量数据前端加载优化策略
  • 分享的文章《人生如棋》
  • crontab执行失败的多种原因
  • CSS居中完全指南——构建CSS居中决策树
  • HashMap剖析之内部结构
  • js递归,无限分级树形折叠菜单
  • ng6--错误信息小结(持续更新)
  • node 版本过低
  • npx命令介绍
  • Spring Cloud Feign的两种使用姿势
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 跨域
  • 微信小程序--------语音识别(前端自己也能玩)
  • 微信支付JSAPI,实测!终极方案
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 自动记录MySQL慢查询快照脚本
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • Spring Batch JSON 支持
  • 容器镜像
  • #ifdef 的技巧用法
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (Ruby)Ubuntu12.04安装Rails环境
  • (补)B+树一些思想
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (汇总)os模块以及shutil模块对文件的操作
  • (接口封装)
  • (十八)SpringBoot之发送QQ邮件
  • (图)IntelliTrace Tools 跟踪云端程序
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .equals()到底是什么意思?
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET命令行(CLI)常用命令
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具