C语言的return用法

2023-05-16

C语言return的用法详解,C语言函数返回值详解

摘自C语言中文网:http://c.biancheng.net/view/1855.html

我觉得对return讲得不错,终于把return弄明白了。

 

函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过 return 语句返回。

return 语句的一般形式为:


return 表达式;  

或者:


return (表达式);  

有没有( )都是正确的,为了简明,一般也不写( )。例如:


return max;
return a+b;
return (100+200);  

对C语言返回值的说明:

1) 没有返回值的函数为空类型,用void表示。例如:


   
  1. void func(){
  2. printf("http://c.biancheng.net\n");
  3. }

一旦函数的返回值类型被定义为 void,就不能再接收它的值了。例如,下面的语句是错误的:


int a = func();  

为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为 void 类型。

2) return 语句可以有多个,可以出现在函数体的任意位置,但是每次调用函数只能有一个 return 语句被执行,所以只有一个返回值(少数的编程语言支持多个返回值,例如Go语言)。例如:


   
  1. //返回两个整数中较大的一个
  2. int max(int a, int b){
  3. if(a > b){
  4. return a;
  5. }else{
  6. return b;
  7. }
  8. }

如果a>b成立,就执行return areturn b不会执行;如果不成立,就执行return breturn a不会执行。

3) 函数一旦遇到 return 语句就立即返回,后面的所有语句都不会被执行到了。从这个角度看,return 语句还有强制结束函数执行的作用。例如:


   
  1. //返回两个整数中较大的一个
  2. int max(int a, int b){
  3. return (a>b) ? a : b;
  4. printf("Function is performed\n");
  5. }

第 4 行代码就是多余的,永远没有执行的机会。

下面我们定义了一个判断素数的函数,这个例子更加实用:


   
  1. #include <stdio.h>
  2.  
  3. int prime(int n){
  4. int is_prime = 1, i;
  5.  
  6. //n一旦小于0就不符合条件,就没必要执行后面的代码了,所以提前结束函数
  7. if(n < 0){ return -1; }
  8.  
  9. for(i=2; i<n; i++){
  10. if(n % i == 0){
  11. is_prime = 0;
  12. break;
  13. }
  14. }
  15.  
  16. return is_prime;
  17. }
  18.  
  19. int main(){
  20. int num, is_prime;
  21. scanf("%d", &num);
  22.  
  23. is_prime = prime(num);
  24. if(is_prime < 0){
  25. printf("%d is a illegal number.\n", num);
  26. }else if(is_prime > 0){
  27. printf("%d is a prime number.\n", num);
  28. }else{
  29. printf("%d is not a prime number.\n", num);
  30. }
  31.  
  32. return 0;
  33. }

prime() 是一个用来求素数的函数。素数是自然数,它的值大于等于零,一旦传递给 prime() 的值小于零就没有意义了,就无法判断是否是素数了,所以一旦检测到参数 n 的值小于 0,就使用 return 语句提前结束函数。

return 语句是提前结束函数的唯一办法。return 后面可以跟一份数据,表示将这份数据返回到函数外面;return 后面也可以不跟任何数据,表示什么也不返回,仅仅用来结束函数。

更改上面的代码,使得 return 后面不跟任何数据:


   
  1. #include <stdio.h>
  2.  
  3. void prime(int n){
  4. int is_prime = 1, i;
  5.  
  6. if(n < 0){
  7. printf("%d is a illegal number.\n", n);
  8. return; //return后面不带任何数据
  9. }
  10.  
  11. for(i=2; i<n; i++){
  12. if(n % i == 0){
  13. is_prime = 0;
  14. break;
  15. }
  16. }
  17.  
  18. if(is_prime > 0){
  19. printf("%d is a prime number.\n", n);
  20. }else{
  21. printf("%d is not a prime number.\n", n);
  22. }
  23. }
  24.  
  25. int main(){
  26. int num;
  27. scanf("%d", &num);
  28. prime(num);
  29.  
  30. return 0;
  31. }

prime() 的返回值是 void,return 后面不能带任何数据,直接写分号即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言的return用法 的相关文章

  • 如何使用函数创建二维数组?

    我正在尝试定义一个二维数组 但我想在函数中执行它 这是我的代码 int createArray int columns int rows int array rows for int i 0 i lt rows i array i new
  • 批处理文件:返回调用者?

    相当于什么return批处理文件子程序的语句 It is goto eof 对于习惯普通编程语言的人来说 这是不寻常的 这是可以理解的 我找到了这个信息here http www robvanderwoude com call php
  • 递归 C void 函数和 return 关键字

    有人知道以下之间的内部区别 void RecFoo1 int bar if bar 0 return RecFoo1 bar 1 and void RecFoo2 int bar if bar 0 return return RecFoo2
  • 为什么我使用 =(单个等于)的相等比较在 Java 中不能正常工作?

    我在以下行中遇到语法错误 但是我不明白这个错误的原因是什么 if address1 compareTo address2 1 System out println address1 is greater than address2 我想要实
  • main 的 ret 指令去哪里了

    我在 Programming from ground up 一书中了解了汇编 x86 如何在全球范围内工作 在本书中 每个程序都以退出中断调用结束 然而 在C编译的程序中 我发现程序以ret结尾 这假设有一个地址要弹出 这将导致程序结束 所
  • 我需要帮助了解 Python 的 return 语句及其在该递归语句中的作用

    不 这不是家庭作业 而是我们的测试学习指南上的内容 我需要了解 return 语句所扮演的角色以及递归所扮演的角色 我不明白为什么该函数在 x 1 后不会中断 def thisFunc x print x if x gt 1 result
  • Python - 从 Tkinter 回调返回

    如何从作为 Tkinter 回调执行的函数中获取返回的对象 import Tkinter as Tk from functools import partial def square x return x x root Tk Tk var
  • C26444 避免使用自定义构造和销毁未命名对象(es.84)

    谁能帮我解决问题吗 以前我只有一种类方法 它是无效的显示 向量与列表 字符串和过滤器 get display函数在里面 然后我决定将这些函数分成矢量 get 和 void display 但是当我返回一个新的修改向量时向量获取 出现错误 C
  • 如果第一个“return”之后有一个“else”,那么性能是否重要?

    我现在看到了两种不同的方法来创建布尔返回方法 bool Case1 if A return true else return false bool Case2 if A return true return false 哪一个更快 不写还有
  • Android:从软键盘中删除 Enter 键

    在我的登录表单中 当用户单击 EditText 并按 Enter 键时 会插入一个新行 从而增加 EditText 的大小 下一刻 它返回到之前的位置 并在密码字段 这是下一个字段 中打印一个点 我想从软键盘上删除这个回车键 是否可以 Us
  • 在 PHP 中,为什么“or die()”可以工作,而“or return”却不行?

    在 PHP 中 您可以通过调用来处理错误or die当遇到某些错误时退出 如下所示 handle fopen location r or die Couldn t get handle Using die 不是处理错误的好方法 我宁愿返回一
  • 为什么我们应该总是从函数返回值?

    我不是一个编程高手 但多次听程序员说我们应该始终从函数返回值 我想知道原因 函数不需要返回任何内容 如果您查看 C 函数 您会发现其中许多函数不需要返回任何内容 好吧 不是明确地 void nonReturningFunction cons
  • javascript中console.log和return有什么区别

    JavaScript 中 console log 和 return 有什么区别 他们都看到在终端上打印出东西 isPrime num if num i 0 return false for var i 2 i lt num i if num
  • 在 java 中返回多个原始对象。不推荐?

    我刚刚开始学习 Java 的 OOP 编程 我已经用 C 编写过一些程序 而我在 Java 中最怀念的事情之一就是可以返回多个值 确实 C 函数仅严格返回一个变量 但我们可以使用按引用参数返回更多变量 相反 在Java中我们不能做这样的事情
  • 为什么powershell会收集未捕获的值并将其作为数组返回

    尽管我认为以下代码应该返回单个值 但它返回一个数组 function Do Something 123 return 456 Do Something GetType will say Object 我了解到 如果我想避免这种情况 我必须将
  • Clojure:让作用域和函数返回值

    我在弄清楚如何使用 let 形式时遇到了一些麻烦 在下面的示例中 我想在本地绑定值 cols 以便稍后在函数中处理它 然而 我注意到 如果我使用 let 函数 sel opt tmp 将返回 nil 值而不是列表 defn sel opt
  • C++:如何从函数返回shared_ptr

    当尝试从函数返回shared ptr时 我得到 对局部变量 recipe 的引用返回 Werror return local addr 我哪里做错了 shared ptr
  • 如何从 JavaScript 调用 ASSX?

    我想调用一个 ASHX 文件并从 JavaScript 传递一些查询字符串变量 并将返回字符串获取到 JavaScript 中的字符串中 我该怎么做 ASHX 文件已被编码为response write 一个基于查询字符串的字符串 像这样的
  • C++ 返回指针/引用

    我对解引用运算符 运算符地址和一般指针有相当好的理解 然而 当我看到这样的东西时 我会感到困惑 int returnA int j a return j int returnB return b int returnC return c i
  • 如何在不使用请求上下文的情况下在烧瓶中渲染模板

    因此 我正在为这个项目开发一个 Flask 应用程序 我需要它在定时变量循环中运行 以检查某些变量的状态 然后给出相应的输出 然而 我遇到的问题是我需要在循环重新启动之前在 Flask 中渲染模板 在变更日志中http flask poco

随机推荐