c 元的函数如何返回多个数据?这个操作在写代码的时候还经常遇到,先来看看典型的错误,有百分之八十的初学者都会这样写。既然要返回多个数据,那么可以把多个数据放在一个数组中,然后直接返回数组名。因为数组名是地址,所以这样的函数我们把它称作指针函数。 这种写法应该说错的还比较明显,大部分编译器在编译的时候就会直接提示警告说返回了局部编辑的地址。 原因很简单,因为数组名是局部变量,属于占空间内存,函数运行结束后会自动释放占空间的内存,也就是数组这块内存没了, 即使调用的函数记住了这个地址,此时也变成了也指针直接去访问,就可能会有未知的错误发生,所以切记不能返回取备量地址。想解这个问题很简单,函数运行结束 会释放占空间,但是堆空间并不在它的管辖范围内,于是可以在函数内部使用 mylog 申请内存,最后返回这块堆内存的地址。即使函数运营结束把指针 p 释放了,但是它指向的内存还在主函数中。因为接收到了 test 函数的返回值,所以指针 s 也是个合法的指针, 指向 test 函数中申请的堆内存,最后用完了记得释放就行。还有一种办法,既然想返回多个数据,可以把这些数据整合在一个结构体中, 返回结构体变量也算是只有一个返回值,只不过这个变量里面又可以拆分成多个变量,所以也能满足要求。最后,关于返回多个数据,大家还有没有其他办法?如果你知道,欢迎在评论区交流。
粉丝6.3万获赞35.5万

大家好,今天我们讲第八张函数函数的返回值。 在函数定义的时候,有一个类型说明符,类型说明符用来说明函数的返回值类型,返回值可以设任意类型或没有返回值类型。根据返回值函数可分为有返回值函数和无返回值函数。 首先我们来看无反绘值函数的定义,无反绘值函数的定义只需要在定义的时候将函数类型说明符用 why 来表示就可以了。例如原程序中就是一个无返回值的函数。 接下来我们看由返回值函数的定义。由 反汇值函数的定义,需要在函数题中加锐吞语句 c 元中函数的反汇值是通过锐吞语句来实现的。一般要求函数返回值类型与锐吞语句中表达式类型一致。 例如,原程序中 i、 b 都是整形, i、 b 的和也是一个整形,与函数返回值的类型一致。假如 i 等于三, b 等于五,则萨姆函数返回一个整数八。 第二点,如果函数返回值类型与 return 语句中表达式类型不一致,则以函数的类型为准,即函数的类型决定返回值的类型。例如, return 语句中 a 加 b, 再加十点八,十点八是一个时数,函数的返回值类型要求是一个整数。设 a 等于三, b 等于五,则萨姆函数返回一个整数十八,而不是返回时数十八点八。 第三点, rat 语句后面表达是两边的括号,可以省略,例如左边的程序等价于右边的程序。 第四,函数有返回值时,可以在表达式中调用该函数。如果无返回值,则该函数不可以在表达式中调用,因为表达式是参与运算, 无反灰指函数值都没有,它怎么参与运算,所以它不能在表达式中调用。例如,在左边的原程序中, sum 是有反灰指类型的, 所以可以把它的返回值用来给 x 负值。正确在右边的程序代码中,那么被定为无返回值类型,因此用它来给 x 负值程序报错。 第五一点,一个函数可以有多个 return 语句,执行到哪一个 return 语句,哪一个就起作用。例如,在函数中有两个 return 语句,一个 return i, 一个 return 负一。当 i 大于等于零 且小于等于一百时,铝盾 i 起作用。当 i 小于零或大于一百时,铝盾负一起作用。 第六点, return 语句有双重作用,第一个作用返回一个值。第二一个作用从函数中退出。当然, return 语句也可以没有后面的表达式,仅仅表示退出函数。例如,在原程序中, 当 i 等于八十,符合 i 大于等于零,小于等于一百这个条件,返回 i 的值八十同时结束,那么函数下面的输出语句以及 return 负一都不会直行,这就是 return 语 据的作用。返回一个值,从函数中退出。接下来我们进行课堂总结。根据返回值,函数可分为有返回值和无返回值类型。无返回值的函数使用 word 做函数类型说明。 函数用 return 语句返回一个确定的值,有返回值的函数可以在表达式中参与运算,无返回值函数不可以。函数可以有多个 return 语句,执行哪一个哪一个就起作用。 函数值决定返回值类型。瑞特语句除了表示返回值,还可以表示从函数中退出。 今天我们的课程就到此结束。


那第六个原则是什么呢?就是如果函数啊,不需要返回啊,如果函数不需要返回,返回类型应该设置为 y 的啊,应该设置为,如果不写函数,默认的返回类型啊,其实是 in 类型 末日,返回的是 inter 类型的值,这个时候就非常容易导致出错啊,非常容易导致出错。 alex 说,老师,我再写一个代码,我写一个代码的时候,我这样写,我写韩式名叫 test 参数,我不要返回类型啊,我也不需要它返回,但是我什么都不写, 注意,当你不写的时候,并不意味着它什么都不返回,实际上这个函数有没有返回值呢?有没有返回类型呢?它其实是有返回类型的,它的返回类型默认是 int 类型的啊。当然,在这地方呢,我们也可以对它进行测试,大家可以感知一下啊,懂了吗?那这个地方呢,我们给大家写 上一个这样的代码啊,写二这样一个代码,然后呢,我们在这地方呢,注意啊,我先介绍一个文件,这儿给上一个 test 啊,点 c, 注意好了,把我们代码的拿过来啊,代码拿过来,大家看,现在这个地方,我们是不是好像什么都没有写,对吧?当你鼠标点上去之后,你会发现它的仿佛类型末日是印的,看到了吧, 而且大家注意,我这个代码这边只是打印和和,我也没有 reto 返回什么值,对不对?但是如果你去接受它的返回值,假设这个地方是 n, 你看,那这个地方呢,我们去打印这个 n 啊,这个时候呢,大家注意看我们结果,哎,你看打印的结果是五, 然后答案一起过十五,懂了吗?大家理解了吗?所以这个地方呢?大家,而且这个返回的值好像没有什么规律啊,没有什么规律对不对啊?凭什么返回五呢?为什么返回五呢?这个我们好像找不到一定的规律,但事实上这个地方呢,其实跟这个好像打一字符的个数有关系啊,你比如说 你看 h e l 啊, h e h e 再加斜杠是五个字符是不是?那这个地方你再加上一个 x 的时候,大家注意,那这个地方是不是就返回六了呢?好像有一定的关系,对吧?但是这个琢磨不透啊啊?这个地方呢,我们没法确保一定是返回某一个值,所以这个返回类型大家注意啊,是很 很不应该的,对不对啊?其实你没写跟写上一个印堂是一个道理的,而如果未来大家想要说这个函数,我就不需要返回什么值,你就明确的给成外的就可以了,这样的话,这个函数就不需要返回,就不会有返回值,你也就没法接入他的返回值了 啊,你也就没法接受他的返回值,也就不需要打印他的返回值了,懂了吧?大家能够理解我意思吗?所以这个地方不敢想当然的说,哎,反正我不需要他的返回值,对吧?那我就不写啊,不写,不写的时候,他意味着返回的其实是 inter 类型的值,当返回到 inter 类型的值,而你 这个地方有没去,没没,没有明确返回的时候,他返回的其实是一个啊,边系末日指定的一个值,那这个值又是不可预测的 啊。所以从这个角度来讲,我们说如果函数不需要返回值,那明确的就把它的返回值类型设置成 y 的,而不是不写,如果不写的话,并且会默认返回一个 inter 类型的值,这些点呢,希望大家们注意好了,当我们讲到这的时候,同学们,那这个地方我们上面就给大家介绍了六个函数在设计的时候的原则 啊,其实还设计的时候还应该有不少的这种使用的注意事项,随着大家未来写代码写的越来越多,慢慢你会感受的会越来越深刻。 ok, 那大家未来在学习的过程中啊,有任何关于函数设计的这种啊小的思考的话,也可以在评论区给鹏哥留言,如果这个视频对你有帮助的话,也可以给鹏哥的视频点个小红心,那这个视频我们讲这里,下个视频我们再见。
