C语言学习系列:初识C语言

news2024/12/25 9:06:44

前言,C语言是什么

语言,比如中文、英语、法语、德语等,是人与人交流的工具。

C语言也是语言,不过是一种特殊的语言,是人与计算机交流的工具

为什么叫C语言呢

这就要从C语言的历史说起了。

一,C语言的前世今生

计算机的世界是二进制的世界,这是学习计算机必须具备的常识,现实世界中的数据之所以能被计算机处理,是因为:

  • 输入到计算机的数据会被转换为二进制
  • 数据在计算机中以二进制的形式存储
  • 数据在计算机中以二进制的形式参与计算

计算机发明伊始,科学家们直接使用二进制编写的程序与计算机交流,二进制语言称之为机器语言

机器语言太难理解、记忆、维护,于是科学家们发明了助记符,编写程序时使用特定的人类语言,交给计算机执行前将程序转换为机器语言,这个过程称为编译,采用助记符的语言称之为汇编语言

汇编语言是一种低级语言,所谓低级是指和硬件关联特别是与CPU指令集关联密切,不同的CPU架构有不同的指令集,可以理解为不同的CPU架构有不同的汇编语言,这就导致一个问题,汇编语言编写的程序不具备通用性,ARM架构的程序不能直接在AMD架构运行。

开发一种屏蔽底层硬件差异的语言提上了科学家的日程,这种语言称之为高级语言高级是指语言远离了硬件,更接近人类语言。

1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix 是用汇编语言写的,无法移植到其他计算机,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在 BCPL 语言的基础上发明了 B 语言

1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)又在 B 语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,所以称为 C 语言。这就是C语言名称的来历。

1973年,整个 Unix 系统都使用 C 语言重写。此后,这种语言开始快速流传,广泛用于各种操作系统和系统软件的开发。

1988年,美国国家标准协会(ANSI)正式将 C 语言标准化,标志着 C 语言开始稳定和规范化。

几十年后的今天,C 语言依然是最广泛使用、最流行的系统编程语言之一,Unix 和 Linux 系统现在还是使用 C 语言开发。

二,C语言的特点

C语言的特点主要包括以下几点:

1,简洁性和灵活性:C语言设计得非常简洁,仅有大约32个关键字和一套有限的控制结构,这使得它易于学习和使用。同时,它提供了很高的灵活性,允许程序员直接控制硬件资源。

2,高级与低级特性的结合:C语言结合了高级语言的结构化特性(如函数、数组、指针)与低级语言的特性(如直接内存访问),使得它既能进行高层的抽象编程,也能进行底层的系统编程。

3,结构化编程:C语言支持结构化编程范式,通过函数来组织代码,使程序易于理解、修改和维护。它提供了结构化的控制语句,如if-else、while、for循环等,有助于编写清晰的逻辑流程。

4,丰富的数据类型:C语言支持多种数据类型,包括基本类型(如整型、浮点型、字符型)、构造类型(数组、结构体、共用体)、指针类型等,以及后来标准中添加的布尔类型、枚举类型等,能够满足复杂数据结构的需求。

5,运算符和表达式的多样性:C语言有34种运算符,涵盖了算术、关系、逻辑、位操作等多种运算,支持丰富的表达式组合,增强了代码的表达力和效率。

6,直接访问硬件:通过指针,C语言允许直接访问内存地址,这对于系统编程和硬件操控非常关键,但同时也增加了程序潜在的风险,如内存泄漏和指针错误。

7,可移植性:虽然C语言与特定的机器架构紧密相关,但通过遵循标准(如ANSI C或ISO C),编写的代码能够在不同平台上编译和运行,具有一定的可移植性。

8,编译型语言:C语言是编译型语言,源代码需要通过编译器转换成机器代码,然后才能在目标机器上运行,这通常意味着执行效率较高。

9,广泛应用:由于其高效性和灵活性,C语言被广泛应用于操作系统、嵌入式系统、设备驱动程序、游戏引擎、数据库等领域。

10,高效性:C语言生成的目标代码通常较小且执行效率高,适合对性能要求严格的应用场景。

三,C语言的里程碑

C语言自20世纪70年代初诞生以来,经历了多个重要发展里程碑,这些里程碑不仅见证了C语言本身的演进,也深刻影响了整个软件开发领域。以下是C语言发展的一些关键节点:

1,起源(1969-1972):C语言的前身可以追溯到贝尔实验室的BCPL(Basic Combined Programming Language)语言,由Martin Richards开发。BCPL启发了B语言的创造,由Ken Thompson在1970年设计,用于编写UNIX操作系统。Dennis Ritchie随后在此基础上开发了C语言,最初是为了重新实现UNIX操作系统。

2, 第一个C编译器(1972):Dennis Ritchie编写了第一个C编译器,该编译器是用汇编语言编写的。这个早期版本的C语言主要用于内部项目,如UNIX系统的重写。

3,K&R C(1978):Brian Kernighan和Dennis Ritchie合著的《The C Programming Language》(通常称为K&R C)出版,这本书成为C语言的非正式标准,极大地推动了C语言的普及。该书首次全面介绍了C语言的语法和使用方法。

4,ANSI C(1983-1989):随着C语言的广泛应用,美国国家标准协会(ANSI)成立了一个委员会来制定C语言的标准。1983年开始工作,1989年正式发布了ANSI X3.159-1989,即ANSI C标准,也称为C89。这个标准定义了C语言的语法、库函数和其他特性,提高了不同编译器之间的兼容性。

5,ISO C(1990):国际标准化组织(ISO)采纳了ANSI C标准,并发布为ISO/IEC 9899:1990,通常称为C90。C90成为了全球认可的C语言国际标准。

6,C99(1999):ISO发布了C语言的第二个主要修订版,ISO/IEC 9899:1999,简称C99。这一版本引入了许多新特性,包括更灵活的数组初始化、变量声明的位置、新的数据类型(如_Bool)、以及对复数的支持等。

7,C11(2011):ISO发布了C语言的第三个重大修订,ISO/IEC 9899:2011,即C11。C11增加了多线程支持、静态断言、匿名结构体和联合体、alignas关键字等新特性,并且对Unicode支持进行了改进。

8,C17/C18(2018):虽然没有引入太多新功能,ISO发布了C语言的一个小更新ISO/IEC 9899:2018,有时称为C17或C18,主要目的是修正C11中的错误并澄清一些规定,提高了标准的清晰度和一致性。

四,C语言的编译

C 语言是一种编译型语言,源码都是文本文件,本身无法执行。必须通过编译器,生成二进制的可执行文件,才能执行。

编译器将代码从文本翻译成二进制指令的过程,就称为编译阶段,又称为“编译时”(compile time),跟运行阶段(又称为“运行时”)相区分。

目前,最常见的 C 语言编译器是自由软件基金会推出的 GCC 编译器,它可以免费使用。Linux 和 Mac 系统可以直接安装 GCC,Windows 系统可以安装 MinGW。

不过,初学者可以使用在线编译器,直接在网页上模拟运行C代码、查看结果,推荐使用下面两个在线工具:

  • CodingGround:https://tutorialspoint.com/compile_c_online.php
  • OnlineGDB: https://onlinegdb.com/online_c_compiler

在这里插入图片描述

五,我的第一个C程序

C 语言的源代码文件,通常以后缀名.c结尾。

1,编写源码

下面是一个简单的 C 程序hello.c,它是一个普通的文本文件,任何文本编译器都能用来写。

#include <stdio.h>

int main(void) {
  printf("Hello World\n");
  return 0;
}

上面这个程序作用仅仅是在屏幕上面显示“Hello World”。

2,编译

假设你已经安装好了 GCC 编译器,可以打开命令行,执行下面的命令:

gcc hello.c

在这里插入图片描述

上面命令使用gcc编译器,将源文件hello.c编译成二进制代码。

运行这个命令以后,默认会在当前目录下生成一个编译结果文件a.out(assembler output 的缩写,Windows 平台为a.exe)。
在这里插入图片描述

此外,编译时可以通过GCC 的-o参数(output 的缩写)指定编译生成的文件名:

gcc -o hello hello.c

在这里插入图片描述

上面命令的-o hello指定编译生存的文件名为hello(取代默认的a.out)。编译后就会生成一个名叫hello的可执行文件,相当于为a.out指定了名称。

3,运行

运行第2步编译生成的文件,就会在屏幕上输出Hello World:

./a.out

如果编译时通过-o指定了编译生成的结果的文件名为hello,则执行如下命令:

./hello

如果是windows,执行如下命令:

hello.exe

在这里插入图片描述

运行程序时,可以通过GCC 的-std=参数(standard 的缩写)指定按照哪个 C 语言的标准进行编译:

gcc -std=c99 hello.c

上面命令指定按照 C99 标准进行编译。

注意,-std后面需要用=连接参数,而不是像上面的-o一样用空格,并且=前后也不能有多余的空格。

六,C语言的核心知识点

很多人说C语言很难,但是大家要知道的是C语言难在工程实践,C语言学起来并不难,其核心知识点如下:

  • ①数据类型
  • ②运算符和表达式
  • ③输入和输出
  • ④流程控制
  • ⑤函数
  • ⑥数组
  • ⑦指针
  • ⑧结构体
  • ⑨文件操作
  • ⑩内存管理

细化版:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1809126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11. MySQL 备份、恢复

文章目录 【 1. MySQL 备份类型 】【 2. 备份数据库 mysqldump 】2.1 备份单个数据表2.2 备份多个数据库2.3 备份所有数据库2.4 备份文件解析 【 3. 恢复数据库 mysql 】【 4. 导出表数据 OUTFILE 】【 5. 恢复表数据 INFILE 】 问题背景 尽管采取了一些管理措施来保证数据库的…

14. RTCP 协议

RTCP 协议概述 RTCP&#xff08;Real-time Transport Control Protocol 或 RTP Control Protocol 或简写 RTCP&#xff09;&#xff0c;实时传输控制协议&#xff0c;是实时传输协议&#xff08;RTP&#xff09;的一个姐妹协议。 注&#xff1a;RTP 协议和 RTP 控制协议&#…

Oracle数据库连接并访问Microsoft SQL Server数据库

Oracle数据库连接并访问Microsoft SQL Server数据库 说明&#xff1a;  1.实际开发中&#xff0c;Oracle数据库与SQLServer数据库之间可能需要相互进行访问&#xff0c;方便业务数据抽取&#xff0c;编写视图及表等操作。  2.SQLServer访问Oracle数据库配置相对较为简单&…

Python数据分析与机器学习在电子商务推荐系统中的应用

文章目录 &#x1f4d1;引言一、推荐系统的类型二、数据收集与预处理2.1 数据收集2.2 数据预处理 三、基于内容的推荐3.1 特征提取3.2 计算相似度3.3 推荐物品 四、协同过滤推荐4.1 基于用户的协同过滤4.2 基于物品的协同过滤 五、混合推荐与评估推荐系统5.1 结合推荐结果5.2 评…

抓包工具 HttpAnalyzerFull_V7.6.4 的下载、安装、使用

目录 一、简介二、下载和安装三、如何注册四、使用介绍4.1 开始、停止、清空监控内容4.2 筛选监控内容4.3 监控内容显示 一、简介 Http Analyzer 是一款功能强大的数据包分析工具&#xff0c;它可以实时监控服务器返回的消息&#xff0c;支持64位Windows系统&#xff0c;可以同…

go语言后端开发学习(三)——基于validator包实现接口校验

前言 在我们开发模块的时候,有一个问题是我们必须要去考虑的&#xff0c;它就是如何进行入参校验&#xff0c;在gin框架的博客中我就介绍过一些常见的参数校验&#xff0c;大家可以参考gin框架学习笔记(四) ——参数绑定与参数验证&#xff0c;而这个其实也不是能够完全应对我…

MYSQL 索引下推 45讲

刘老师群里,看到一位小友 问<MYSQL 45讲>林晓斌的回答 大意是一个组合索引 (a,b,c) 条件 a > 5 and a <10 and b123, 这样的情况下是如何? 林老师给的回答是 A>5 ,然后下推B123 小友 问 "为什么不是先 进行范围查询,然后在索引下推 b123?" 然后就…

python数据分析-Matplotlib绘图实例以及金融数据分析应用

通过学习扩展库matplotlib及背后的理论知识进行数据分析和可视化&#xff0c;重点以案例分析为主&#xff0c;通过实际案例演示相关理论和Python语言的应用。 读取文件countries-aggregated.csv数据&#xff0c;其中Date&#xff1a;日期, Country&#xff1a;国家, Confirmed…

格式化后硬盘数据能恢复吗?硬盘数据恢复这样做!

硬盘是电脑中必备的数据存储设备&#xff0c;另外还有移动硬盘。移动硬盘存储空间非常大、性价比高、便于携带&#xff0c;给我们带来和很多便利。但是和其他存储设备一样&#xff0c;各种硬盘也会出现各种问题&#xff0c;比如常见的格式化硬盘导致数据丢失的问题。 怎么样恢复…

【Linux系统化学习】网络层——IP协议

目录 IP协议 协议头格式 两个问题 网段划分 IP地址的分类 CIDR网段划分&#xff08;无分类编址&#xff09; 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 路由表的查询 IP协议 应用层、运输层上两层协议我们只考虑的是通信的双方对应层&#xff0c;…

MQ解决的问题

系统中MQ能解决哪些问题&#xff1f; 1.不同语言的程序使用MQ通信 2.分布式&#xff0c;微服务&#xff0c;之间的通信&#xff0c;实现服务质检解耦 3.高并发实现销峰作用 4.实现异步&#xff0c;提高用户体验。

Java的自动装箱和自动拆箱

自动装箱和拆箱在Java开发中的应用与注意事项 在Java开发中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Unboxing&#xff09;是指基本数据类型与其对应的包装类之间的自动转换。这些特性可以使代码更加简洁和易读&#xff0c;但在实际项目…

类和对象的学习总结(一)

面向对象和面向过程编程初步认识 C语言是面向过程的&#xff0c;关注过程&#xff08;分析求解问题的步骤&#xff09; 例如&#xff1a;外卖&#xff0c;关注点菜&#xff0c;接单&#xff0c;送单等 C是面向对象的&#xff0c;关注对象&#xff0c;把一件事拆分成不同的对象&…

机器学习笔记——支持向量机

支持向量机 参数模型对分布需要假设&#xff08;这也是与非参数模型的区别之一&#xff09;间隔最大化&#xff0c;形式转化为凸二次规划问题 最大化间隔 间隔最大化是意思&#xff1a;对训练集有着充分大的确信度来分类训练数据&#xff0c;最难以分的点也有足够大的信度将…

-31-()

在终端运行时消除输入空格对程序的影响可以使用{在scanf后加“getchar()”或者在scanf&#xff08;“空格%d”,&a&#xff09;} 按位与和移位操作符只能用于整数且都要转位二进制后进行相应操作 不创建临时变量&#xff0c;实现两个数的交换&#xff1a;1——使用加减法&…

插卡式仪器模块:数据记录模块(插卡式)

• 32 位分辨率 • 250 KSPS 采样率 • 可以同时并且连续地记录两个通道的电压输入 • 实时上传原始数据至 PC 端 通道22输入阻抗电压22 kΩ10 MΩ电流0.2 Ω输入范围电压 250 mV 4.5 V电流1.5 A耦合DCDC带宽450 Hz385 HzADC 分辨率32 Bits24 Bits采样率10 kSPS250 kSPS测量…

【最新鸿蒙应用开发】——类Web开发范式1——生命周期

兼容JS的类Web开发范式 类Web命令式开发的生命周期 1. 应用生命周期 1.1. app.js 每个应用可以在app.js自定义应用级生命周期的实现逻辑&#xff0c;包括&#xff1a; onCreate&#xff1a;在应用生成时被调用的生命周期函数。 onDestroy&#xff1a;在应用销毁时被调用的生…

高德地图简单实现点标,和区域绘制

高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart 百度搜索高德地图开发平台 注册高德地图开发账号 在应用管理中 我的应用中 添加一个Key 点击提交 进入高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart …

详解FedProx:FedAvg的改进版 Federated optimization in heterogeneous networks

FedProx&#xff1a;2020 FedAvg的改进 论文&#xff1a;《Federated Optimization in Heterogeneous Networks》 引用量&#xff1a;4445 源码地址&#xff1a; 官方实现&#xff08;tensorflow&#xff09;https://github.com/litian96/FedProx 几个pytorch实现&#xff1a;…

【激光雷达】

激光雷达 机械式360扫描雷达半固态激光雷达二维扫描一维扫描 固态激光雷达OPA固态激光雷达&#xff08; 光学相控阵技术&#xff09;Flash激光雷达 FMCW 激光雷达 激光雷达技术在近几年可以说是蓬勃发展&#xff0c;新能源汽车的大量使用&#xff0c;给雷达技术的发展提供了肥沃…