【连载】(开始学习C语言的指针)——乐创DIY C语言讲义——6.1节 2024-05-30 07:10:28 6.1 函数参数传递的不可逆性在开始第六章正式讲解前,我们先来回顾一下之前写的函数。第四章中我们有讲到函数是用来实现某一特定功能的代码模块。比如,当我们需要频繁地使用某一段代码来计算三角形面积时,那么可以将实现这一功能的代码片段打包成一个函数,提供给其他代码调用。如“float triangle_area(float base, float height)”,在这个函数中,“triangle_area”为函数名,它是一个返回“float”类型的函数,而括号中的“float base”和“float height”正是用来分别将需要求解的三角形的底边长和高传递进函数的参数,我们称为“形式参数”或者“传递参数”。其他代码需要使用求解三角形的面积时,只需要调用“triangle_area”即可。一旦这个函数被调用之后,程序立即会跳转到三角形面积求解的代码中去进行计算,计算完成后,会以“float”的形式将三角形的面积返回出来。所谓返回值,即函数运算完成之后返回结果的一个数值,一个函数最多只能返回一个返回值,我们只需要在函数内部定义一个与函数类型一样的变量,将运算结果存储在里面,并且使用“return”关键词即可将其返回。关于三角形面积求解的函数,如图6-1-1所示。图6-1-1 三角形面积函数回顾完成上面内容之后,趁着记忆比较新鲜,再来用C语言来解决一个问题,假设小明和小丽是一对好朋友,小明手里有一杯焦糖玛奇朵,小丽手里有一杯双拼奶茶,他们各自喝了半杯,都想尝一下对方手中饮料的味道,本来交换一下是一件很简单的事情,但是他们又不希望各自的杯子被对方喝到,那么只能交换杯子中的饮料了,请帮他们设计一个函数,用来交换杯子中的饮料。这其实是一个非常简单的变量内容交换问题,只需要再去找一个杯子,把小明的饮料倒在里面,然后把小丽的饮料倒给小明,最后将第三个杯子中原本小明的饮料倒给小丽就可以解决,我们可以很简单地来完成这个函数,如图6-1-2所示。图6-1-2 交换杯子中的饮料小明和小丽看了这个算法之后,他们都不想动手来倒这杯饮料,就这样僵持着,他们想到了一个办法,交给小明的姥姥来完成这个交换饮料的功能,那么此时,小明的姥姥就相当于这个饮料交换的特定模块,我们可以将其联想成一个C语言中的函数。小明的饮料和小丽的饮料传给姥姥时,就相当于将传递参数传给函数。那么因此我们可以写出如图6-1-3中的代码。图6-1-3 变量交换函数仔细观察一下图6-1-3中代码的输出值,我们惊讶地发现,函数并没有达到我们想要的结果,小明杯子中的饮料和小丽杯子中的饮料还是没有交换,仔细阅读了多次代码,没有发现任何问题。这个确实不是代码的问题引起的。借用上面这个故事,有一个关于函数调用的重要特性大家一个要注意,即函数传递参数是单向传递的,无论函数中对形式参数如何改变,在调用函数处传递参数的值完全不受影响,这个一定要注意。而函数唯一可以将结果传递给主函数的途径就只有返回值这一个途径,但是函数的返回值又是唯一的。这就类似于姥姥看到了两个娃娃在把杯子中的饮料倒腾来倒腾去不卫生,不肯交换完成一样。因此对于上面这个问题我们是否就束手无策了?继续我们的故事,正当此时,路过的老王叔叔过来了,看到大家都属愁眉苦脸的,上去询问情况,了解情况后,王叔发现,这两个杯子一模一样,并且每个杯子内部是有内胆的,只需要将内胆拧下来,交换一下即可,最后大家都开开心心,各回各家了。我们可以写出如图6-1-4中的代码。图6-1-4 利用指针交换变量中的数值 赞 (0) 相关推荐 C语言程序开发中,多个if语句混在一起,代码看起来很乱怎么办? 原创IT刘小虎2019-08-31 20:22:42 if 分支语句是C语言程序开发中不可缺少的控制结构之一,它广泛存在于各个C语言程序中.甚至有程序员认为写程序就是将各种情况都考虑到,然后使用if- ... 剖析C语言是如何画出这样的三角形的 哈哈,就是喜欢这些有意思的C语言 上篇文章是这样写的 c语言画谢宾斯基三角形 那篇文章写的有点不直接,然后再查了下资料,看到了下面这些,我觉得解释更加好,这里主要是运用了光栅法,至于光栅法,可以百度看 ... Julia机器核心编程.5 julia的浮点数 bits这个函数好像没有了,我xiang给你看下这个值 的二进制表示在最全面的符号位不同 指数形式的浮点数 代码01行使用f代替e来表示这是一个Float32类型的值.代码03行使 ... 光线追踪 embree使用教程 embree基本使用教程 摘要 1.背景介绍 2.学习Embree需要的知识背景 2.1 必须需要了解光线追踪的原理 2.2 需要会用C++或者C语言 3.Embree介绍 3.1 embree是In ... 【连载】(堆栈和递归函数)乐创DIY C语言讲义——4.5节 4.5 堆栈和递归函数 堆栈这个概念,最早学习微机原理的时候就学过,它表示的是一种在汇编语言调用子程序时候保存现场的存储空间,它所具有的数据结构属性就是先进后出,这个是我们之前学习计算机硬件时候讲述的 ... 【连载】(函数的定义)乐创DIY C语言讲义——4.1节 4.1函数的定义 到目前为止,我们所有的程序都是以"main()"函数作为程序的唯一入口的,对main函数的解释,也就仅限于其作为整个程序的入口.但是函数的定义,入口参数,返回值等 ... 【连载】(判断执行语句)乐创DIY C语言讲义——3.8节(2) 2 判断执行语句 判断执行语句,执行时候会有一个条件判断,一旦当条件判断为真,即True的时候,就执行相应的语句,满足条件被执行的语句用大括号"{}"括起来.由于在C语言中没有用于 ... 【连载】(操作一维数组)——乐创DIY C语言讲义——5.2节 5.2 一维数组的操作 一维数组在被定义好之后,就可以在程序中去使用它了,一般一个数组的使用有元素读取,元素赋值,元素遍历等操作.说到底无非就是数组定义及初始化,元素的读写,和数组的读写这几种方式.接 ... 【连载】(初识一维数组)——乐创DIY C语言讲义——5.1节 5.1初识一维数组 前面章节中,我们一起学习了一些简单的数据类型,它们包括浮点类型和整数类型两大类.通过使用关键词可以分别定义不同含义的单个变量.比如,小明这次考试的数学成绩是30分,那么我们可以定义 ... 【连载】(函数私有化)乐创DIY C语言讲义——4.6节 4.6 函数私有化 C语言的语句非常简单,关键词也少得可怜,关于变量和函数的修饰符也就只有区区几个,因此一个关键词有时候有着多重含义,这也就是为何C语言明明非常简单,但是用起来又非常复杂的原因之一.C ... 【连载】(学了这么多年C语言,你真的了解static关键词吗)乐创DIY C语言讲义——4.4节 4.4 变量的补充 前面内容中,我们已经讨论了变量的定义,但是由于函数的概念还没有引入,因而这是不全面的,本节开始,我们再来补充一些变量的其他内容,这就相当于对变量这个概念的重新认识. 我们之前讲的变 ... 【连载】(函数的参数和返回值)乐创DIY C语言讲义——4.3节 4.3 函数的参数和返回值 函数定义和声明好之后,整个函数也就定义好了,上一小节我们说到,声明函数原型的目的,就是将函数的信息传递给编译器"登记"下来,以便后续调用时进行参数的检查 ... 【连载】(函数声明和简单的Makefile文件)乐创DIY C语言讲义——4.2节 4.2 函数声明 当编译器检测到一个函数调用时,它产生代码传递参数,并且调用这个函数,等函数运行完成之后,接收到这个函数的返回值(如果函数有返回值).但是编译器是如何知道函数接收到的是什么类型和多少数 ... 【连载】(选择执行语句if else和switch)乐创DIY C语言讲义——3.8节(4) 4 选择执行语句 有些时候,我们希望程序既不顺序执行,也不只做单一的判断(代码运行还是不运行),很多时候,我们往往只希望对某一个条件的不同状态分别执行不同的语句,这样就构成C语言中的选择执行语句了.C ...