看旋转编码器程序的时候,遇见了一些关于函数返回值的函数,感觉很懵逼,就百度了一下C语言函数调用,感觉写的挺好的,

原链接:http://c.biancheng.net/view/204.html

通常我们希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值。函数的返回值是通过函数中的 return 语句获得的。return 语句将被调函数中的一个确定的值带回到主调函数中,供主调函数使用

函数的返回值类型是在定义函数时指定的。return 语句中表达式的类型应与定义函数时指定的返回值类型一致。如果不一致,则以函数定义时的返回值类型为准,对 return 语句中表达式的类型自动进行转换,然后再将它返回给主调函数使用。但是建议初学者在编程的时候,务必要保持它们两个类型一致。

在调用函数时,如果需要从被调函数返回一个值供主调函数使用,那么返回值类型必须定义成非 void 型。此时被调函数中必须包含 return 语句,而且 return 后面必须要有返回值,否则就是语法错误。

如果函数有返回值,那么 return 语句后面的括号可以不要,比如“return(z);”等价于“return z;”。若不需要返回值则可以不要 return 语句。

需要强调的是,一个函数中可以有多个 return 语句,但并不是所有的 return 语句都起作用。执行到哪个 return 语句,就是哪个 return 语句起作用,该 return 语句后的其他语句就都不会执行了。

return是如何将值返回给主调函数的

我们知道,被调函数运行结束后才会返回主调函数,但是被调函数运行结束后系统为被调函数中的局部变量分配的内存空间就会被释放。也就是说,return 返回的那个值在被调函数运行一结束就被释放掉了,那么它是怎么返回给主调函数的呢?

事实上在执行 return 语句时系统是在内部自动创建了一个临时变量,然后将 return 要返回的那个值赋给这个临时变量。所以当被调函数运行结束后 return 后面的返回值真的就被释放掉了,最后是通过这个临时变量将值返回给主调函数的。而且定义函数时指定的返回值类型实际上指定的就是这个临时变量的类型。这些都是系统自动完成的,了解即可。

这也是为什么当 return 语句中表达式的类型和函数返回值类型不一致时,将 return 的类型转换成函数返回值类型的原因。return 语句实际上就是将其后的值赋给临时变量,所以它要以临时变量的类型为准,即函数返回值的类型。

函数的返回值,C语言函数返回值详解相关推荐

  1. C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)

    C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...

  2. c语言自定义函数多个返回值,C语言函数返回值

    C语言函数返回值教程 如果,我们希望函数不返回任何值,那么我们需要显式的指明其返回类型为 C语言函数不返回值 语法 void funcName(paramType1 param1, paramType ...

  3. c语言printf函数中的格式控制字符串,C++_C语言格式化输入输出函数详解,一:格式输出函数printf() 1 - phpStudy...

    C语言格式化输入输出函数详解 一:格式输出函数printf() 1.调用形式一般为:printf("格式化控制字符串",输出表列): 2.格式化控制字符串用于指定输出格式,它有三种 ...

  4. pandas新字段(数据列)生成、使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战

    pandas新字段(数据列)生成.使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战 pandas apply用法: pandas apply方法的作用原理 ...

  5. 嵌入式c语言为什么变量定义在前面,嵌入式C语言数据类型和变量详解

    原标题:嵌入式C语言数据类型和变量详解 一般来讲,标准的C语言类型在嵌入式编译器中是合法的.但由于嵌入式控制器的受限环境.嵌入式c语言的变量和数据类型具有新的特征,这些特征体现在如下方面. 嵌入式C语 ...

  6. java文档注释定界符_c语言的注释定界符详解

    c语言的注释定界符详解 c语言的注释定界符是什么 1.最早期的C语言注释是:/* */ 2.后来又增加的行注释:// 其中/**/是多行注释,//是单行注释. 需要注意的是:C 语言的注释并不是可以出 ...

  7. 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)

    本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...

  8. C语言字节对齐问题详解

    转载原文连接:https://www.cnblogs.com/clover-toeic/p/3853132.html C语言字节对齐问题详解 引言 考虑下面的结构体定义: 1 typedef stru ...

  9. [Go语言入门] 14 Go语言goroutine和通道详解

    文章目录 14 Go语言goroutine和通道详解 14.1 goroutine 14.2 通道(channel) 声明通道变量 创建通道 通道操作 14.3 管道 14.4 单向通道 14.5 通 ...

  10. C语言传递可变参数详解

    C语言传递可变参数详解 1.可变参数详解 在有些情况下,我们需要传递的参数的个数是可变的.C 语言为这种情况提供了一个解决方案,它允许定义一个函数,能根据具体的需求接受可变数量的参数.可以使编程更加的 ...

最新文章

  1. 洛谷P1550 [USACO08OCT]打井Watering Hole
  2. ThreadPoolExecutor的一点理解 专题
  3. SAP CRM SPRO Customizing 里 Text Object 属性 continue 的含义
  4. 一寸照纯红色底图片_和记场下载
  5. php网站开发期末大作业,大学生期末网页大作业
  6. Linux 共享内存详解一
  7. Linux shell脚本中shift的用法说明
  8. 什么是CTI?呼叫中心系统CTI技术的应用
  9. java毕业设计商品货物信息管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  10. html网页设计大赛作品介绍,html简单网页设计作品
  11. python实现小写金额转换成大写
  12. c语言编程阿拉伯数字转中文,阿拉伯数字到中文大写数字的转换
  13. 开发一个app需要多少钱?
  14. 下一代 Web 应用模型 —— Progressive Web App
  15. 图像相似度计算-kmeans聚类
  16. 云服务器同账号不同地域数据迁移的方法
  17. Cocos 2.x 扩展开发教程
  18. FL Studio2023终身免费升级适合电音舞曲DJ使用
  19. TCP协议为什么是三次握手而不是两次
  20. 联想万全服务器 R630 故障处理

热门文章

  1. NTFS、FAT32、exFAT这三种格式的区别
  2. 【自然语言处理】【ChatGPT系列】Chain of Thought:从大模型中引导出推理能力
  3. 防灾科技学院的计算机如何,防灾科技学院最好的专业是什么
  4. 批量搜狗快速收录查询
  5. 植物大战僵尸2010年度版C语言修改阳光数
  6. Python类的使用——老王开枪例子(多个类互通)
  7. 你想要了解的黑客入门知识在这里
  8. 【js特效】图片循环滚动代码
  9. mPEG-HSA;甲氧基聚乙二醇人血清白蛋白;HSA-PEG简介
  10. 关于弹窗的四种类型(四种控件)