1. 首页
  2. 综合百科
  3. $ number是什么意思(哦)

$ number是什么意思(哦)

简介:关于$ number是什么意思(哦)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

我把之前的文章总结到Github里了,欢迎各位大明星。

https://github.com/crisxuan/bestJavaer

前言

C语言是一种抽象的、面向过程的语言,广泛应用于底层开发,在计算机系统中发挥着不可替代的作用。可以说C语言是编程的基础,也就是说不管学什么语言,都要把C语言放在第一位。下图更好的说明了C语言的重要性。

可以看出,C语言是低级语言,也是系统级语言,操作系统是用C语言写的,比如Windows、Linux、UNIX。如果说其他语言光鲜亮丽,那么C语言就是灵魂,永远那么朴实无华。

C语言特性

那么,既然C语言这么重要,有什么值得学习的呢?我们不应该因为重要就去学,我们更在乎的是我们能学到什么,学了之后能得到什么。

C语言的设计

C语言是贝尔实验室的DennisRitch和KenThompson在1972年开发UNIX操作系统时设计的。c语言是一种流行的语言,它完美地融合了计算机科学理论和工程实践理论,使用户能够完成模块化编程和设计。

计算机科学理论(Computer science theory):简称CS,是系统研究信息和计算的理论基础及其如何在计算机系统中实现和应用的学科。

C语言具有高效性

C语言是一种高效的语言,旨在充分发挥计算机的优势。所以C语言程序运行速度很快,C语言可以合理使用内存,获得最大运行速度。

C语言具有可移植性

C语言是一种可移植语言,这意味着在一台计算机上编写的C语言程序可以很容易地在另一台计算机上运行,从而大大减少了程序移植的工作量。

C语言特点

C语言是一种简洁的语言,因为C语言的设计更接近底层,所以不需要Java、C#等很多高级语言的特点,编程要求也不是很严格。C语言有结构化的控制语句,C语言是结构化语言。它提供的控制语句具有结构化特征,如for循环、ifelse判断语句和switch语句。c语言的数据类型非常丰富,不仅包括传统的字符型、整型、浮点型、数组类型,还包括其他编程语言没有的数据类型,比如指针。c语言可以直接读写内存地址,所以可以实现汇编语言的主要功能,直接操作硬件。c语言速度快,生成的目标代码执行效率高。让我们通过一个简单的例子来说明C语言。

入门级C语言程序

我们来看一个非常简单的C语言程序。我是mac电脑,所以用xcode进行开发。我觉得工具用的方便不重要。

第一个C语言程序

# includesdio . hint main(int argc,const char * argv[]){ printf(' Hello,World!\ n’);printf(' myNameiscxuan \ n ')printf(' number=% d \ n 'number);return0您可能不知道这段代码是什么意思,但是不要担心,让我们先运行它,看看结果。

这个程序输出Hello,World!而MyNameiscxuan,最后一行是程序的执行结果,表示这个程序是否有错误。让我们解释一下每一行代码的含义。

首先,第一行# includesdio.h包含另一个文件,它告诉编译器在当前程序中包含stdio.h的内容。Stdio.h是C编译器软件包的标准部分,可以提供键盘输入和显示输出。

什么是C标准软件包?c语言是一种通用的、过程化的和命令式的计算机编程语言,由DennisM于1972年开发。C标准库是一组C语言内置函数、常量和头文件,如stdio.h、stdlib.h、math.h等。这个库将作为C程序员的参考手册。

我们稍后将介绍stdio.h。现在你知道它是什么是好的。

stdio.h下面的一行代码是主函数。

C程序可以包含一个或多个函数,函数是C语言的基础,就像方法是Java的基本组件一样。Main()表示函数名,int表示主函数返回一个整数。Void表示main()没有参数。这些我们后面会详细解释,只是要记住int和void是标准ANSIC定义main()的一部分(如果你用的是ANSIC之前的编译器,请忽略void)。

那么表示注释,用表示,注释的内容在两个符号之间。这

些符号能够提高程序的可读性。

注意:注释只是为了帮助程序员理解代码的含义,编译器会忽略注释

下面就是{,这是左花括号,它表示的是函数体的开始,而最后的右花括号}表示函数体的结束。{}中间是书写代码的地方,也叫做代码块。

intnumber表示的是将会使用一个名为number的变量,而且number是int整数类型。

number=11表示的是把值11赋值给number的变量。

printf(Hello,world!\n);表示调用一个函数,这个语句使用printf()函数,在屏幕上显示Hello,world,printf()函数是C标准库函数中的一种,它能够把程序运行的结果输出到显示器上。而代码\n表示的是换行,也就是另起一行,把光标移到下一行。

然后接下来的一行printf()和上面一行是一样的,我们就不多说了。最后一行printf()有点意思,你会发现有一个%d的语法,它的意思表示的是使用整形输出字符串。

代码块的最后一行是return0,它可以看成是main函数的结束,最后一行是代码块},它表示的是程序的结束。

好了,我们现在写完了第一个C语言程序,有没有对C有了更深的认识呢?肯定没有。。。这才哪到哪,继续学习吧。

现在,我们可以归纳为C语言程序的几个组成要素,如下图所示

C语言执行流程

C语言程序成为高级语言的原因是它能够读取并理解人们的思想。然而,为了能够在系统中运行hello.c程序,则各个C语句必须由其他程序转换为一系列低级机器语言指令。这些指令被打包作为可执行对象程序,存储在二进制磁盘文件中。目标程序也称为可执行目标文件。

在UNIX系统中,从源文件到对象文件的转换是由编译器执行完成的。

gcc-ohellohello.c

gcc编译器驱动从源文件读取hello.c,并把它翻译成一个可执行文件hello。这个翻译过程可用如下图来表示

这就是一个完整的helloworld程序执行过程,会涉及几个核心组件:预处理器、编译器、汇编器、连接器,下面我们逐个击破。

预处理阶段(Preprocessingphase),预处理器会根据开始的#字符,修改源C程序。#include<stdio.h>命令就会告诉预处理器去读系统头文件stdio.h中的内容,并把它插入到程序作为文本。然后就得到了另外一个C程序hello.i,这个程序通常是以.i为结尾。然后是编译阶段(Compilationphase),编译器会把文本文件hello.i翻译成文本hello.s,它包括一段汇编语言程序(assembly-languageprogram)。编译完成之后是汇编阶段(Assemblyphase),这一步,汇编器as会把hello.s翻译成机器指令,把这些指令打包成可重定位的二进制程序(relocatableobjectprogram)放在hello.c文件中。它包含的17个字节是函数main的指令编码,如果我们在文本编辑器中打开hello.o将会看到一堆乱码。最后一个是链接阶段(Linkingphase),我们的hello程序会调用printf函数,它是C编译器提供的C标准库中的一部分。printf函数位于一个叫做printf.o文件中,它是一个单独的预编译好的目标文件,而这个文件必须要和我们的hello.o进行链接,连接器(ld)会处理这个合并操作。结果是,hello文件,它是一个可执行的目标文件(或称为可执行文件),已准备好加载到内存中并由系统执行。

你需要理解编译系统做了什么

对于上面这种简单的hello程序来说,我们可以依赖编译系统(compilationsystem)来提供一个正确和有效的机器代码。然而,对于我们上面讲的程序员来说,编译器有几大特征你需要知道

优化程序性能(Optimizingprogramperformance),现代编译器是一种高效的用来生成良好代码的工具。对于程序员来说,你无需为了编写高质量的代码而去理解编译器内部做了什么工作。然而,为了编写出高效的C语言程序,我们需要了解一些基本的机器码以及编译器将不同的C语句转化为机器代码的过程。理解链接时出现的错误(Understandinglink-timeerrors),在我们的经验中,一些非常复杂的错误大多是由链接阶段引起的,特别是当你想要构建大型软件项目时。避免安全漏洞(Avoidingsecurityholes),近些年来,缓冲区溢出(bufferoverflowvulnerabilities)是造成网络和Internet服务的罪魁祸首,所以我们有必要去规避这种问题。

系统硬件组成

为了理解hello程序在运行时发生了什么,我们需要首先对系统的硬件有一个认识。下面这是一张Intel系统产品的模型,我们来对其进行解释

总线(Buses):在整个系统中运行的是称为总线的电气管道的集合,这些总线在组件之间来回传输字节信息。通常总线被设计成传送定长的字节块,也就是字(word)。字中的字节数(字长)是一个基本的系统参数,各个系统中都不尽相同。现在大部分的字都是4个字节(32位)或者8个字节(64位)。I/O设备(I/ODevices):Input/Output设备是系统和外部世界的连接。上图中有四类I/O设备:用于用户输入的键盘和鼠标,用于用户输出的显示器,一个磁盘驱动用来长时间的保存数据和程序。刚开始的时候,可执行程序就保存在磁盘上。每个I/O设备连接I/O总线都被称为控制器(controller)或者是适配器(Adapter)。控制器和适配器之间的主要区别在于封装方式。控制器是I/O设备本身或者系统的主印制板电路(通常称作主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。无论组织形式如何,它们的最终目的都是彼此交换信息。主存(MainMemory),主存是一个临时存储设备,而不是永久性存储,磁盘是永久性存储的设备。主存既保存程序,又保存处理器执行流程所处理的数据。从物理组成上说,主存是由一系列DRAM(dynamicrandomaccessmemory)动态随机存储构成的集合。逻辑上说,内存就是一个线性的字节数组,有它唯一的地址编号,从0开始。一般来说,组成程序的每条机器指令都由不同数量的字节构成,C程序变量相对应的数据项的大小根据类型进行变化。比如,在Linux的x86-64机器上,short类型的数据需要2个字节,int和float需要4个字节,而long和double需要8个字节。处理器(Processor),CPU(centralprocessingunit)或者简单的处理器,是解释(并执行)存储在主存储器中的指令的引擎。处理器的核心大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。处理器根据其指令集体系结构定义的指令模型进行操作。在这个模型中,指令按照严格的顺序执行,执行一条指令涉及执行一系列的步骤。处理器从程序计数器指向的内存中读取指令,解释指令中的位,执行该指令指示的一些简单操作,然后更新程序计数器以指向下一条指令。指令与指令之间可能连续,可能不连续(比如jmp指令就不会顺序读取)下面是CPU可能执行简单操作的几个步骤加载(Load):从主存中拷贝一个字节或者一个字到内存中,覆盖寄存器先前的内容存储(Store):将寄存器中的字节或字复制到主存储器中的某个位置,从而覆盖该位置的先前内容操作(Operate):把两个寄存器的内容复制到ALU(Arithmeticlogicunit)。把两个字进行算术运算,并把结果存储在寄存器中,重写寄存器先前的内容。

算术逻辑单元(ALU)是对数字二进制数执行算术和按位运算的组合数字电子电路。

跳转(jump):从指令中抽取一个字,把这个字复制到程序计数器(PC)中,覆盖原来的值

剖析hello程序的执行过程

前面我们简单的介绍了一下计算机的硬件的组成和操作,现在我们正式介绍运行示例程序时发生了什么,我们会从宏观的角度进行描述,不会涉及到所有的技术细节

刚开始时,shell程序执行它的指令,等待用户键入一个命令。当我们在键盘上输入了./hello这几个字符时,shell程序将字符逐一读入寄存器,再把它放到内存中,如下图所示

当我们在键盘上敲击回车键的时候,shell程序就知道我们已经结束了命令的输入。然后shell执行一系列指令来加载可执行的hello文件,这些指令将目标文件中的代码和数据从磁盘复制到主存。

利用DMA(DirectMemoryAccess)技术可以直接将磁盘中的数据复制到内存中,如下

一旦目标文件中hello中的代码和数据被加载到主存,处理器就开始执行hello程序的main程序中的机器语言指令。这些指令将hello,world\n字符串中的字节从主存复制到寄存器文件,再从寄存器中复制到显示设备,最终显示在屏幕上。如下所示

高速缓存是关键

上面我们介绍完了一个hello程序的执行过程,系统花费了大量时间把信息从一个地方搬运到另外一个地方。hello程序的机器指令最初存储在磁盘上。当程序加载后,它们会拷贝到主存中。当CPU开始运行时,指令又从内存复制到CPU中。同样的,字符串数据hello,world\n最初也是在磁盘上,它被复制到内存中,然后再到显示器设备输出。从程序员的角度来看,这种复制大部分是开销,这减慢了程序的工作效率。因此,对于系统设计来说,最主要的一个工作是让程序运行的越来越快。

由于物理定律,较大的存储设备要比较小的存储设备慢。而由于寄存器和内存的处理效率在越来越大,所以针对这种差异,系统设计者采用了更小更快的存储设备,称为高速缓存存储器(cachememory,简称为cache高速缓存),作为暂时的集结区域,存放近期可能会需要的信息。如下图所示

图中我们标出了高速缓存的位置,位于高速缓存中的L1高速缓存容量可以达到数万字节,访问速度几乎和访问寄存器文件一样快。容量更大的L2高速缓存通过一条特殊的总线链接CPU,虽然L2缓存比L1缓存慢5倍,但是仍比内存要哦快5-10倍。L1和L2是使用一种静态随机访问存储器(SRAM)的硬件技术实现的。最新的、处理器更强大的系统甚至有三级缓存:L1、L2和L3。系统可以获得一个很大的存储器,同时访问速度也更快,原因是利用了高速缓存的局部性原理。

Again:入门程序细节

现在,我们来探讨一下入门级程序的细节,由浅入深的来了解一下C语言的特性。

#include<stdio.h>

我们上面说到,#include<stdio.h>是程序编译之前要处理的内容,称为编译预处理命令。

预处理命令是在编译之前进行处理。预处理程序一般以#号开头。

所有的C编译器软件包都提供stdio.h文件。该文件包含了给编译器使用的输入和输出函数,比如println()信息。该文件名的含义是标准输入/输出头文件。通常,在C程序顶部的信息集合被称为头文件(header)。

C的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSIC(而不是ISOC)仍被广泛使用。一些软件开发者使用ISOC,还有一些使用StandardC

C标准库

除了<sdtio.h>外,C标准库还包括下面这些头文件

<assert.h>

提供了一个名为assert的关键字,它用于验证程序作出的假设,并在假设为假输出诊断消息。

<ctype.h>

C标准库的ctype.h头文件提供了一些函数,可以用于测试和映射字符。

这些字符接受int作为参数,它的值必须是EOF或者是一个无符号字符

EOF是一个计算机术语,为EndOfFile的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。

<errno.h>

C标准库的errno.h头文件定义了整数变量errno,它是通过系统调用设置的,这些库函数表明了什么发生了错误。

<float.h>

C标准库的float.h头文件包含了一组与浮点值相关的依赖于平台的常量。

<limits.h>

limits.h头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型(比如char、int和long)的值。

<locale.h>

locale.h头文件定义了特定地域的设置,比如日期格式和货币符号

<math.h>

math.h头文件定义了各种数学函数和一个宏。在这个库中所有可用的功能都带有一个double类型的参数,且都返回double类型的结果。

<setjmp.h>

setjmp.h头文件定义了宏setjmp()、函数longjmp()和变量类型jmp_buf,该变量类型会绕过正常的函数调用和返回规则。

<signal.h>

signal.h头文件定义了一个变量类型sig_atomic_t、两个函数调用和一些宏来处理程序执行期间报告的不同信号。

<stdarg.h>

stdarg.h头文件定义了一个变量类型va_list和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。

<stddef.h>

stddef.h头文件定义了各种变量类型和宏。这些定义中的大部分也出现在其它头文件中。

<stdlib.h>

stdlib.h头文件定义了四个变量类型、一些宏和各种通用工具函数。

<string.h>

string.h头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

<time.h>

time.h头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数。

main()函数

main函数听起来像是调皮捣蛋的孩子故意给方法名起一个主要的方法,来告诉他人他才是这个世界的中心。但事实却不是这样,而main()方法确实是世界的中心。

C语言程序一定从main()函数开始执行,除了main()函数外,你可以随意命名其他函数。通常,main后面的()中表示一些传入信息,我们上面的那个例子中没有传递信息,因为圆括号中的输入是void。

除了上面那种写法外,还有两种main方法的表示方式,一种是voidmain(){},一种是intmain(intargc,char*argv[]){}

voidmain()声明了一个带有不确定参数的构造方法intmain(intargc,char*argv[]){}其中的argc是一个非负值,表示从运行程序的环境传递到程序的参数数量。它是指向argc+1指针数组的第一个元素的指针,其中最后一个为null,而前一个(如果有的话)指向表示从主机环境传递给程序的参数的字符串。如果argv[0]不是空指针(或者等效地,如果argc>0),则指向表示程序名称的字符串,如果在主机环境中无法使用程序名称,则该字符串为空。

注释

在程序中,使用的表示注释,注释对于程序来说没有什么实际用处,但是对程序员来说却非常有用,它能够帮助我们理解程序,也能够让他人看懂你写的程序,我们在开发工作中,都非常反感不写注释的人,由此可见注释非常重要。

C语言注释的好处是,它可以放在任意地方,甚至代码在同一行也没关系。较长的注释可以多行表示,我们使用表示多行注释,而//只表示的是单行注释。下面是几种注释的表示形式

//这是一个单行注释/*多行注释用一行表示*//*多行注释用多行表示多行注释用多行表示多行注释用多行表示多行注释用多行表示*/

函数体

在头文件、main方法后面的就是函数体(注释一般不算),函数体就是函数的执行体,是你编写大量代码的地方。

变量声明

在我们入门级的代码中,我们声明了一个名为number的变量,它的类型是int,这行代码叫做声明,声明是C语言最重要的特性之一。这个声明完成了两件事情:定义了一个名为number的变量,定义number的具体类型。

int是C语言的一个关键字(keyword),表示一种基本的C语言数据类型。关键字是用于语言定义的。不能使用关键字作为变量进行定义。

示例中的number是一个标识符(identifier),也就是一个变量、函数或者其他实体的名称。

变量赋值

在入门例子程序中,我们声明了一个number变量,并为其赋值为11,赋值是C语言的基本操作之一。这行代码的意思就是把值1赋给变量number。在执行intnumber时,编译器会在计算机内存中为变量number预留空间,然后在执行这行赋值表达式语句时,把值存储在之前预留的位置。可以给number赋不同的值,这就是number之所以被称为变量(variable)的原因。

printf函数

在入门例子程序中,有三行printf(),这是C语言的标准函数。圆括号中的内容是从main函数传递给printf函数的。参数分为两种:实际参数(actualargument)和形式参数(formalparameters)。我们上面提到的printf函数括号中的内容,都是实参。

return语句

在入门例子程序中,return语句是最后一条语句。intmain(void)中的int表明main()函数应返回一个整数。有返回值的C函数要有return语句,没有返回值的程序也建议大家保留return关键字,这是一种好的习惯或者说统一的编码风格。

分号

在C语言中,每一行的结尾都要用;进行结束,它表示一个语句的结束,如果忘记或者会略分号会被编译器提示错误。

关键字

下面是C语言中的关键字,C语言的关键字一共有32个,根据其作用不同进行划分

数据类型关键字

数据类型的关键字主要有12个,分别是

char:声明字符型变量或函数double:声明双精度变量或函数float:声明浮点型变量或函数int:声明整型变量或函数long:声明长整型变量或函数short:声明短整型变量或函数signed:声明有符号类型变量或函数_Bool:声明布尔类型_Complex:声明复数_Imaginary:声明虚数unsigned:声明无符号类型变量或函数void:声明函数无返回值或无参数,声明无类型指针

控制语句关键字

控制语句循环的关键字也有12个,分别是

循环语句

for:for循环,使用的最多do:循环语句的前提条件循环体while:循环语句的循环条件break:跳出当前循环continue:结束当前循环,开始下一轮循环

条件语句

if:条件语句的判断条件else:条件语句的否定分支,与if连用goto:无条件跳转语句

开关语句

switch:用于开关语句case:开关语句的另外一种分支default:开关语句中的其他分支

返回语句

retur:子程序返回语句(可以带参数,也看不带参数)

存储类型关键字

auto:声明自动变量一般不使用extern:声明变量是在其他文件正声明(也可以看做是引用变量)register:声明寄存器变量static:声明静态变量

其他关键字

const:声明只读变量sizeof:计算数据类型长度typedef:用以给数据类型取别名volatile:说明变量在程序执行中可被隐含地改变

后记

这篇文章我们先介绍了C语言的特性,C语言为什么这么火,C语言的重要性,之后我们以一道C语言的入门程序讲起,我们讲了C语言的基本构成要素,C语言在硬件上是如何运行的,C语言的编译过程和执行过程等,在这之后我们又加深讲解了一下入门例子程序的组成特征。

如果你觉得这篇文章不错的的话,欢迎小伙伴们四连走起:点赞、在看、留言、分享。你的四连是我更文的动力。

你好,我是cxuan,我自己手写了四本PDF,分别是Java基础总结、HTTP核心总结、计算机基础知识,操作系统核心总结,我已经整理成为PDF,可以关注公众号Java建设者回复PDF领取优质资料。

本文主要介绍了关于$ number是什么意思(哦)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://seotea.com/article/87788.html