【连载】(函数的参数和返回值)乐创DIY C语言讲义——4.3节 2024-06-14 05:36:09 4.3 函数的参数和返回值函数定义和声明好之后,整个函数也就定义好了,上一小节我们说到,声明函数原型的目的,就是将函数的信息传递给编译器“登记”下来,以便后续调用时进行参数的检查和返回值的传递。在C语言中,描述一个函数的信息主要由三个维度的信息:(1) 函数名。函数名是我们在定义和声明完成函数之后,最为直接的信息,在C语言中,不允许函数名重复,这个是ISO C语言完全不允许的。但是在GNUC语言中,GCC编译器允许使用“__weak“属性来声明和定义一个”弱函数“,这个弱函数的意思类似于C#和JAVA等高级语言中的抽象函数。除此以外,C语言不支持类似于高级语言那样的重载函数。但是如果放眼一个C语言工程,里面有很多的.c文件,在两个.c文件中定义函数名,返回值,参数类型,参数数量一样的函数是允许的,只不过函数需要用关键词”static“来修饰,这个我们后面再详细讨论。(2) 返回值(函数类型)。在C语言中,只允许一个函数最多只有一个返回值,函数的返回值可以是我们之前所学习的基本数据类型。而这里有读者要问了,如果我有多个返回值需要函数返回时该怎么办?这里我们可以返回指针类型,关于指针类型,后面有一大篇的内容,这里先不讨论。当然,如果函数不返回任何值时,可以使用关键词“void“替代其返回类型,那此时这个函数就是无返回值函数。(3) 参数类型和参数数量。C语言函数后面括号里面跟随的变量又被称为“传递参数“,显然这些参数是在函数被调用时,从调用端传进来的。这些参数可以是我们之前学过的一些基本数据类型,也可以是后面将会学习的数组,指针等。如果定义的函数不需要传递参数时,可以用关键词”void“表示,如”int main(void)“。当然main函数的内容远远不止我们目前使用的那么简单,后面也会详细讨论。有一点需要注意,C语言的传递参数只能从调用处传入函数里面,反方向传递是不被允许的。我们可以看图4-3-1的程序代码。图4-3-1中,定义了一个函数,这个函数的本意是将传入的两个变量进行交换。但是当我们完成这个函数之后,将结果打印出来,发现和我们想象的完全不一样,这就是C 语言函数传递参数的一个很重要特点,单向性,即只能从调用处传入函数,但是函数里面的变量是无法传到调用处的。后面会讲到如何利用指针参数变量来使得函数修改指针的指向值,这种方式是可以改变传递参数的值的,但指针原理和这里不一样,因此先不做讨论。 图4-3-1 传递参数交换 以上就是C语言中函数定义的全部需要注意的内容,其实C语言中的函数更多的趋向于“黑盒“设计,这一点无论是硬件设计,软件设计的基本思想都类似,即将每个细小的模块分割出来,将其独立去实现,然后统一好各自的接口。在做大系统的时候,将这些小模块一个个根据其接口统一拼接起来。用这样方法方便系统调试,同时也提高了开发效率和开发协作。而我们在编写函数时,也要注意这个原则,即将特定的功能模块,用函数封装好,留出接口,并且要确保各个函数的独立性,总结一下程序各个模块间的关系”高内聚,低耦合“。 赞 (0) 相关推荐 C语言期末基础知识大盘点!拒绝挂科,从我做起,争做别人家的娃! 一.C语言基本常识 1.语言由函数组成 2.main是程序入口 3.C语言中不能出现中文或中文字符 (注释和字符串除外) 关键字 : C语言提供表示特殊含义的单词. 特 ... 有C基础,如何快速过度到C ? 由C到C++ OOP第一课 C语言的局限 C++的特点 C++的程序特征 C++程序的结构特性 C++程序的编辑.编译和运行 ⭐C++对C的补充 C语言的局限 类型检查机制相对较弱,使得程序中的一些错 ... 【连载】(堆栈和递归函数)乐创DIY C语言讲义——4.5节 4.5 堆栈和递归函数 堆栈这个概念,最早学习微机原理的时候就学过,它表示的是一种在汇编语言调用子程序时候保存现场的存储空间,它所具有的数据结构属性就是先进后出,这个是我们之前学习计算机硬件时候讲述的 ... 【连载】(判断执行语句)乐创DIY C语言讲义——3.8节(2) 2 判断执行语句 判断执行语句,执行时候会有一个条件判断,一旦当条件判断为真,即True的时候,就执行相应的语句,满足条件被执行的语句用大括号"{}"括起来.由于在C语言中没有用于 ... 【回顾】(函数的参数和返回值)乐创DIY C语言讲义——4.3节 4.3 函数的参数和返回值 函数定义和声明好之后,整个函数也就定义好了,上一小节我们说到,声明函数原型的目的,就是将函数的信息传递给编译器"登记"下来,以便后续调用时进行参数的检查 ... 【连载】(函数私有化)乐创DIY C语言讲义——4.6节 4.6 函数私有化 C语言的语句非常简单,关键词也少得可怜,关于变量和函数的修饰符也就只有区区几个,因此一个关键词有时候有着多重含义,这也就是为何C语言明明非常简单,但是用起来又非常复杂的原因之一.C ... 【连载】(函数声明和简单的Makefile文件)乐创DIY C语言讲义——4.2节 4.2 函数声明 当编译器检测到一个函数调用时,它产生代码传递参数,并且调用这个函数,等函数运行完成之后,接收到这个函数的返回值(如果函数有返回值).但是编译器是如何知道函数接收到的是什么类型和多少数 ... 【连载】(函数的定义)乐创DIY C语言讲义——4.1节 4.1函数的定义 到目前为止,我们所有的程序都是以"main()"函数作为程序的唯一入口的,对main函数的解释,也就仅限于其作为整个程序的入口.但是函数的定义,入口参数,返回值等 ... 【连载】(学了这么多年C语言,你真的了解static关键词吗)乐创DIY C语言讲义——4.4节 4.4 变量的补充 前面内容中,我们已经讨论了变量的定义,但是由于函数的概念还没有引入,因而这是不全面的,本节开始,我们再来补充一些变量的其他内容,这就相当于对变量这个概念的重新认识. 我们之前讲的变 ... 【回顾】(函数声明和简单的Makefile文件)乐创DIY C语言讲义——4.2节 4.2 函数声明 当编译器检测到一个函数调用时,它产生代码传递参数,并且调用这个函数,等函数运行完成之后,接收到这个函数的返回值(如果函数有返回值).但是编译器是如何知道函数接收到的是什么类型和多少数 ... 【回顾】(函数的定义)乐创DIY C语言讲义——4.1节 4.1函数的定义 到目前为止,我们所有的程序都是以"main()"函数作为程序的唯一入口的,对main函数的解释,也就仅限于其作为整个程序的入口.但是函数的定义,入口参数,返回值等 ...