C语言中函数返回值的问题

c语言中有关于在函数返回值的问题,在函数中的局部变量主要是在栈上开辟的,出了函数变量就被回收了,针对函数返回值得问题,给出下面几个比较具体的例子来说明:

  1. 函数返回值是在函数中定义的局部变量

    这类型的返回值在主函数中是可以使用的,因为返回局部变量值得时候,返回的是值得一个副本,而在主函数中我们需要的也只是这个值而已,因此是可以的,例如

  2. int fun(char *arr)
  3. {
  4. int num = 0;
  5. while (*arr != ‘\\0‘)
  6. {
  7. num = num * 10 + *arr - ‘0‘;
  8. arr++;
  9. }
  10. return num;
  11. printf("%d ", num);
  12. }
  13. int main()
  14. {
  15. int tem = 0;
  16. char *arr = "12345";
  17. tem = fun(arr);
  18. printf("%d",tem);
  19. system("pause");
  20. return 0;
  21. }
  22. 2.函数返回的是函数中定义的指针变量
  23. char *fun()
  24. {
  25. char *arr = "1234";
  26. return arr;
  27. }
  28. int main()
  29. {
  30. char *tem = fun();
  31. printf("%s", tem);
  32. system("pause");
  33. return 0;
  34. }
  35. 这在运行过程中也是正确的。
  36. 3.函数不能返回局部变量的地址
  37. int *fun()
  38. {
  39. int a = 10;
  40. return &a;
  41. }
  42. int main()
  43. {
  44. int *tem = fun();
  45. printf("%d", *tem);
  46. system("pause");
  47. return 0;
  48. }
  49. 4.函数也不能返回数组的首地址
  50. int *fun()
  51. {
  52. int arr[] = { 1, 2, 3, 4 };
  53. return arr;
  54. }
  55. int main()
  56. {
  57. int *tem = fun();
  58. system("pause");
  59. return 0;
  60. }
时间: 2024-12-09 11:29:30

C语言中函数返回值的问题的相关文章

C语言的函数返回值

一:背景 谈到C语言的函数返回值,可能会感觉很亲切,不就是一个函数返回值嘛,当初学C语言的时候早就学过了很easy嘛,我曾经也是这么想的.后来要上研究生了,研究生阶段搞得就是C,所以又重新开始学习C,学习C的过程中遇到了很多问题,在此博客中一一记录.实际过程中遇到的第一个问题自然就是函数返回值了.如果有人问你在一个函数中声明一个字符串数组,最后再return这个数组.这可以实现嘛?如果是问我我可能会毫不犹豫的说OK.那事实呢?由此本文诞生了...... 二:问题 先看几个实际的例子: #incl

C语言中函数返回数组

#include "stdio.h"/*int* set(int a,int *c){ int *b; b=malloc(sizeof(int)*3); c[0]=a; c[1]=1+a; c[2]=2+a; b[0]=13; b[1]=14; b[2]=15; return b;}*/char *set(void){ char *buf; buf=malloc(sizeof(char)*3);//创建内存区 buf[0]=0x30; buf[1]=0x31; buf[2]=0x32;

shell中函数返回值

1.前言 快半年没有写博客了,荒废了很久,工作中的杂事太多,自己越来越懒了.为了鞭策自己成长,还是要坚持写写博客,记录自己的成长. 2.shell函数介绍 语法: [ function ] funname [()] { action; [return int;] } 说明: (1)可以带function fun()  定义,也可以直接fun() 定义,不带任何参数. (2)参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. return后跟数值n(0-25

C语言scanf函数返回值小记

scanf scanf是C标准库stdio里面定义的用于获取用户输入的函数,具体的介绍可以在CppReference上看到.scanf的返回值是已经成功赋值的变量个数,也就是说在 scanf("%d %d",&a,&b)这个调用返回的值在用户输入1 2时返回的是2,如果用户输入的是1 b,那么返回值为1,如果输入的是a b,那么返回的是0. 问题 刚刚用了这个例子,发现输入字母时会导致一直无限输出0: #include <stdio.h> int main(

C语言中打印返回值

demo: ----return :返回值------------------ int mosquitto_username_pw_set(struct mosquitto *mosq, const char *username, const char *password)              {                      if(!mosq) return MOSQ_ERR_INVAL; if(mosq->username){                   _mosq

SWIFT中函数返回值为Tuple

在playgroundm内键入以下代码,求一个成绩数组内最大分值和最小分值 func maxminScore(scores:Array<Int>) -> (maxScore:Int,minScore:Int)? { //一个可以空的Tuple if scores.isEmpty{ return nil  //判断是否有值,没值就返回一个空值 } var maxScore = scores[0], minScore = scores[0] for score in scores[1..&l

使用ctypes调用C共享库中函数返回值为链表式结构时的方法

/*********************************************************************  * Author  : Samson  * Date    : 02/02/2015  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

C语言中函数和指针的参数传递

最近写二叉树的数据结构实验,想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个例子讨论一下c语言中指针作为形参的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个数据引用同一个数据,那么更改任意的一个都相当于更改了本体,那么另一个数据所对应的值也会改变,可是C中是没有这个概念的.所以就产生了一些东西.和我们本来想的有差别. 一.明确C语言中函数的入口: C语言中函数的形参负责接收外部数据,那么数据究竟怎么进入函数的呢,其实我们在函数体内操作的形参只是传递进来

python学习之函数返回值

python中函数返回值的方式有2种: 1.return语句 说明:return语句执行完后,函数后续的代码将不会被执行 2.yield语句 说明:yield语句返回的是一个迭代器对象,可以通过next(a)(a为函数的实例对象)来调用. yield后面的代码照样不会被执行. >>> def a(): ... for i in range(1,3): ... yield i ... print('over') ... >>> a() <generator obje