首页 > 编程知识 正文

c语言指针函数,函数声明与函数定义的区别

时间:2023-05-06 05:47:35 阅读:9782 作者:4450

c语言是一种通用计算机编程语言,应用广泛。 c语言的设计目标是提供一种编程语言,可以用简单的方法编译,处理低级内存,生成少量的机器代码,在不支持运行环境的情况下运行。

c语言也适合与汇编语言结合使用。 它经常可以与内联汇编语言或汇编语言的目标文件一起连接。 在这两种操作系统环境中,c函数的应用程序绑定接口(ABI )一定与汇编语言子进程(routine/procedure )的ABI完全兼容。

虽然c语言提供了很多低级处理的功能,但仍然保持着良好的跨平台特性,用一个标准编写的c语言程序可以在很多计算机平台上编译,可以通过嵌入式处理器(单片机

20世纪80年代,为了避免各开发厂商使用的c语言语法产生差异,美国国家标准局制定了完整的国际标准语法,称为ANSI C,作为c语言的标准。 20世纪80年代至今的程序开发工具一般支持符合ANSI C标准的语法。

基本特性

1、C是高级语言:高级语言的基本结构与句子和低级语言实用性相结合的工作单元。

2、c是结构化语言。 结构化语言的明显特点是代码和数据的分离。 也就是说,程序的各个部分除了必要的信息交换之外都是相互独立的。 这种结构化方式使程序层次清晰、易于使用,便于维护和调试。 c语言作为函数提供给用户,这些函数易于调用,具有多个循环、条件语句控制程序的流程,使程序完全结构化。

3、C语言功能齐全:有多种数据类型,引入了指针概念,使程序更高效。 另外,计算功能、逻辑判断功能也比较强,是可以达到决策目的的游戏。

4、c语言适用范围广:适用于Windows、DOS、UNIX等多种操作系统; 也适用于很多机型。 如果编写c语言需要硬件操作,它将优于其他高级语言,一些大型APP应用程序也是用c语言编写的。

5、c语言APP指针:可以直接进行接近硬件的操作,但c的指针操作不受保护,带来很多不安全因素。 C在这方面进行了改进,在保留指针操作的同时提高了安全性,得到了一些用户的支持,但这些改进增加了语言的复杂性,也为其他部分所诟病。 Java吸取了c的教训,废除了指针操作,废除了c改进中讨论的一些地方,在安全性和适用性方面取得了良好的效果,但其本身在虚拟机中运行,执行效率低于C /C。 一般来说,c、c、java被视为同一类语言,长期占据程序使用排名的前三位。

6、c语言文件由数据序列组成。 可以配置二进制文件或文本文件。 常用的c语言集成开发环境(IDE )有: MicrosoftVisual Studio、Dev-C、Code:Blocks、Borland C Builder、Watcom C、GNU DJGPP C、廉价航空公司winu

特有的特征

c语言是具有结构化编程、变量作用域(variable scope )和递归功能的程序性语言。

所有c语言传递参数都可以是值传递(pass by value )或指针传递(a pointer passed by value )。

不同的变量类型可以在结构(struct )中组合。

“保留关键字”(reserved keywords )只能包含32个字符,可以灵活地命名变量和函数。

某些变量类型可以转换,如整数类型和字符类型的变量。

通过指针(pointer ),c语言可以容易地将存储器控制在低水平。

预编译处理(preprocessor )使c语言的编译更加灵活。

优缺点

好处

1、简洁紧凑,灵活方便

c语言共有32个关键词,9种控制语句,程序书写格式自由,区分大小写。 把高级语言的基本结构与词句和低级语言的实用性结合起来。 c语言可以像汇编语言一样进行对齐、字节和地址操作。 这三个是计算机最基本的工作单位。

2、运算符丰富

c语言的运算符范围很广,共有34种运算符。 c语言将括号、赋值、强制类型转换等作为运算符处理。 由此,c语言的运算型极其丰富,表现型多样化。 通过活用各种运算符,可以实现其他高级语言难以实现的运算。

3、数据类型丰富

c语言的数据类型有整数型、实数型、字符型、排列型、指针型、结构体型、共用体型等。 用于实现各种复杂数据结构的运算。 引入了指针的概念,提高了程序的效率。

4、表达方法灵活实用

c语言提供了许多运算符和表达式值的方法,对问题的表达可以通过许多方法获得,其编程更加积极灵活。 语法限制不太严格,可以将整形量、字符型数据和逻辑型数据通用化等,编程自由度很大。

5、允许直接访问物理地址,操作硬件

c语言可以直接访问物理地址,可以直接操作硬件,从而实现高级语言的功能和

低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。

6、生成目标代码质量高,程序执行效率高

C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%~20%。

7、可移植性好

C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。

8、表达力强

C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。

C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。

它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。

另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

缺点

1、 C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。

2、 C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。

基本构成

数据类型

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

常量与变量

常量其值不可改变,符号常量名通常用大写。

变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。

数组

如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。

指针

如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。

指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。

指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。

字符串

C语言的字符串其实就是以''字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面的一些用于对字符串进行操作的函数。它们不同于字符数组。使用这些函数需要引用头文件。

文件输入/输出

在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件;中。

标准输入/输出

有三个标准输入/输出是标准I/O库预先定义的:

stdin标准输入

stdout标准输出

stderr输入输出错误

运算

C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,对此合理进行分类,找出它们与数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。

先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2.13级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。

函数(function),名称出自清朝数学家李善兰的著作《代数学》。之所以如此翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,也即函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量

函数的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。

定义:一般的,在一个变化过程中,有两个变量x、y,如果给定一个x值,相应的就确定唯一的一个y,那么就称y是x的函数,其中x是自变量,y是因变量,x的取值范围叫做这个函数的定义域,相应y的取值范围叫做函数的值域。

表示方法:

解析式法

用含有数学关系的等式来表示两个变量之间的函数关系的方法叫做解析式法。这种方法的优点是能简明、准确、清楚地表示出函数与自变量之间的数量关系;缺点是求对应值时往往要经过较复杂的运算,而且在实际问题中有的函数关系不一定能用表达式表示出来。

列表法

用列表的方法来表示两个变量之间函数关系的方法叫做列表法。这种方法的优点是通过表格中已知自变量的值,可以直接读出与之对应的函数值;缺点是只能列出部分对应值,难以反映函数的全貌。

图像法

把一个函数的自变量x与对应的因变量y的值分别作为点的横坐标和纵坐标,在直角坐标系内描出它的对应点,所有这些点组成的图形叫做该函数的图象。这种表示函数关系的方法叫做图象法。这种方法的优点是通过函数图象可以直观、形象地把函数关系表示出来;缺点是从图象观察得到的数量关系是近似的。

函数声明:

定义:

C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。

函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描述了函数的接口。定义函数的程序员提供函数原型,使用函数的程序员就只需要对函数原型编辑即可。

【返回类型】 函数名(参数1类型 参数1,参数2类型 参数2,……);

函数声明中的形参名往往被忽略,如果声明中提供了形参的名字,也只是用作辅助文档。另外要注意函数声明是一个语句,后面不可漏分号!

声明与定义的区别:

函数的声明与函数的定义形式上十分相似,但是二者有着本质上的不同。声明是不开辟内存的,仅仅告诉编译器,要声明的部分存在,要预留一点空间。定义则需要开辟内存。

函数的定义

函数的定义是一个完整的函数单元:

包含函数类型、函数名、形参及形参类型、函数体等

在程序中,函数的定义只能有一次

函数首部与花括号间不加分号

函数的声明

函数声明只是对编译系统的一个说明:

函数声明是对定义的函数的返回值的类型说明,以通知系统在本函数中所调用的函数是什么类型。

不包含函数体(或形参)

调用几次该函数就应在各个主调函数中做相应声明

函数声明是一个说明语句,必须以分号结束!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。