精华内容
下载资源
问答
  • 在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数不只一return,这可是新鲜的玩意儿: int func (int b) { int a=5; if (a>b) return a; else return b; return 0; }  原来C/C++ 中,...

          在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数中有不只一个return,这可是个新鲜的玩意儿:

    int func (int b)
    {
       int a=5;
       if (a>b)
          return a;
       else
          return b;
    
       return  0;
    }

         原来C/C++ 中,reutrn语句是这样定义的:

         通过在函数中使用返回语句,返回一个值给函数,同时终止函数的调用,返回主函数。(注意:同时终止函数的调用,也就是说函数在运行到return时就会终止了。)

         格式:    return (表达式); 或return 表达式;

          功能:    

           (1)计算表达式的值,将表达式的值返回给函数。 

           (2)从被调用的函数返回主调函数。 
           说明: 
           (1)返回值类型应和函数类型一致,不一致将返回值自动转换成函数类型。 
           (2)函数中可以有多条返回语句,这时一般与if语句联用,执行到哪一条返回语句,哪条返回语句起作用。 
           (3)函数中无return语句,执行至函数体结尾时返回,此时将返回一个不确定的值给函数。
           (4)如果只需要从函数中返回,而不需带回值,使用不带表达式的return语句。

           此外,有时调用一个函数,需要返回多个参数,这种情况应当如何处理呢?

           可以有两种办法:一是申请一个全局变量,在函数调用时对其进行处理,返回主程序时仍然可用;另一种办法是,返回一个指针,指针指向一个结构体,或者一个数组,这样就能返回多个参数了。而指向结构体的指针,在很多情况下是很常见的。

    展开全文
  • 函数可以有个返回值?初探神奇的fork()函数

    千次阅读 多人点赞 2018-03-20 21:21:13
    个函数返回值很简单的选择分支结构,学过基本语法的都知道,如果走if,就不会走else if. 当然,那是没有碰到fork()函数的时候. 为什么呢? 我们编译运行一下代码来观察结果. 发现两printf都被...

    一个函数的返回值可有两个

    这里写图片描述

    一个很简单的选择分支结构,学过基本语法的都知道,如果走if,就不会走else if. 当然,那是没有碰到fork()函数的时候.

    为什么呢? 我们编译运行一下代码来观察结果.

    这里写图片描述

    发现两个printf都被执行了?难道if else 结构失效了? 其实不然

    当程序运行起来就变成了进程

    我们写的代码当没被运行的时候,只是躺在磁盘中冰冷冷的文本,当它被载入内存后,它变成进程后,生命周期才开始. 可执行程序载入内存的过程叫做”内存映射

    Linux通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容,这个过程成为内存映射.
    –<<深入理解计算机系统>>

    其实程序使用的是虚拟内存空间,有兴趣可以去我博客另一篇看一看
    虚拟内存和缺页,为什么使用一键加速会使你的电脑变慢?

    但这和一个函数有两个返回值有什么关系吗?

    其实,并不是一个函数有两个返回值,而是调用fork函数后,在内存中一个进程被复制成两个进程, 分别被cpu执行. 那么执行出来肯定就会有两个结果.

    简单点说就是一份文本,被分别两个人去解读,那么肯定就会有两个结果.

    让父子进程各司其职

    fork()函数是创建一个新进程, 它的返回值分别是

    • 子进程返回 0
    • 父进程返回子进程的进程号 (PID)

    那么,我们就可以通过fork()函数的返回值识别父子进程,让其通过if else分流,干不同的事情

    在代码中也有用到 getpid()和getppid(),其中

    • getpid()函数是返回该进程的的ID号 ID号的类型是 pid_t
    • getppid() 函数是返回该进程的父进程的ID号

    遇到分歧如何处理

    使用fork()函数,我们可以实现父子进程的各司其职,通常情况下井水不犯河水,

    但是如果父子进程的任务重叠了,都想去改一数的值,那么情况是什么样的呢?

    这里写图片描述

    是儿子让老子 或者 老子让儿子呢?

    这里写图片描述

    显而易见,当出现数据改动时,父子进程还是是各自运行各自的.

    其中在fork之后发生数据改动的情况,叫做”写时拷贝

    在解释什么是写时拷贝 之前,我们有必要说说当函数调用fork()时会发生什么

    怎么创建一个新进程

    当一个程序进入内存后,操作系统去管理,调度它,那么肯定首先要获得这个进程的信息(PCB Process Control Block)

    就好像学校在管理学生时,需要知道学生的姓名,年龄等信息

    在Linux中,进程的信息被描述为一个叫task_struct 的结构体,操作系统通过对这个结构体的操控,间接操控进程.

    调用程序fork()函数后,就把原来进程的 task_struct 直接又复制了一份,改一下里面的PID,就变成了一个新进程, 六耳猕猴.

    因为进程是运行在虚拟内存中的,而且每个进程都有自己的虚拟内存空间

    最后要映射到物理内存中,

    物理内存是有限的,你不能复制一个进程,又映射到新的物理内存中去.国土宝贵,不会让你这么干.

    解决的方法就是 写时拷贝:

    你随便复制原有进程,随便开辟虚拟内存空间,

    但是你只要是从我这复制的信息, 那么就必须映射到同一片物理内存上去,

    并且咱两对这片物理空间都不能修改(标记为只读)

    你想修改就重找一物理地址去保存你的值.

    这里写图片描述

    展开全文
  • 函数有个返回值

    千次阅读 2019-11-23 19:08:47
    //无参多个返回值函数 func myfunc01( ) (int,int,int) { return 1,2,3 } //go官方推荐方法 func myfunc02( ) (a int,b int,c int) { a,b,c = 111,222,333 return } func myfunc03( ) (a,b,c int) { a,...

    package main
    import “fmt”
    //无参多个返回值的函数
    func myfunc01( ) (int,int,int) {
    return 1,2,3
    }
    //go官方推荐方法
    func myfunc02( ) (a int,b int,c int) {
    a,b,c = 111,222,333
    return
    }
    func myfunc03( ) (a,b,c int) {
    a,b,c = 444,555,666
    return
    }
    func main ( ) {
    //函数调用
    a,b,c := myfunc01( )
    fmt.Printf(“a = %d,b = %d,c = %d\n”,a,b,c)
    a,b,c := myfunc02( )
    fmt.Printf(“a = %d,b = %d,c = %d\n”,a,b,c)
    a,b,c := myfunc03( )
    fmt.Printf(“a = %d,b = %d,c = %d\n”,a,b,c)
    }

    展开全文
  • fwrite(将数据写至文件流) 相关函数 fopen,fread,fseek,fscanf 表头文件 #include 定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream); 函数说明 fwrite()用来将数据写入文件流...
    fwrite(将数据写至文件流) 
    
    相关函数 fopen,fread,fseek,fscanf

    表头文件 #include<stdio.h>

    定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);

    函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。

    返回值 返回实际写入的nmemb数目。

    范例 #include<stdio.h>
    #define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
    #define nmemb 3
    struct test
    {
    char name[20];
    int size;
    }s[nmemb];
    main()
    {
    FILE * stream;
    set_s(0,”Linux!”);
    set_s(1,”FreeBSD!”);
    set_s(2,”Windows2000.”);
    stream=fopen(“/tmp/fwrite”,”w”);
    fwrite(s,sizeof(struct test),nmemb,stream);
    fclose(stream);
    }

    执行 参考fread()。


    fread(从文件流读取数据)
    相关函数 fopen,fwrite,fseek,fscanf

    表头文件 #include<stdio.h>

    定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

    函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

    返回值 返回实际读取到的nmemb数目。

    附加说明

    范例 #include<stdio.h>
    #define nmemb 3
    struct test
    {
    char name[20];
    int size;
    }s[nmemb];
    main()
    {
    FILE * stream;
    int i;
    stream = fopen(“/tmp/fwrite”,”r”);
    fread(s,sizeof(struct test),nmemb,stream);
    fclose(stream);
    for(i=0;i<nmemb;i++)
    printf(“name[%d]=%-20s:size[%d]=%d/n”,i,s[i].name,i,s[i].size);
    }

    执行 name[0]=Linux! size[0]=6
    name[1]=FreeBSD! size[1]=8
    name[2]=Windows2000 size[2]=11
    展开全文
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 [return int;] } 格式1: 简化写法,不写 function 关键字: 函数名(){ ...
  • Lua函数的多个返回值

    千次阅读 2016-09-20 15:23:07
    Lua中的函数的一个很特殊也很有用的性质,即可以有个返回值。包括一些内置的函数就是这样。比如string.find函数,在给定的字符串中查找一个pattern,如果有匹配的部分,则返回对应的头、尾的两个索引值;如果不...
  • 学生也尝试了不少方法:如把多个需要返回的值作相应的处理后变成一个可以用return语句返回的数据,再在主调函数中拆开返回的数据使之变成几个值;或者把需要返回多个值的一个函数分开几个函数去实现多个值的返回。...
  • 1 致谢 感谢网友honglei.chen的回答, ...今天在用MATLAB完成 Machine Learning中的作业,遇到一小问题,就是在使用max()函数时,我只需要获得当前矩阵所有行向量的最大值的索引,而不需要获...
  • 1. 函数: public (string, string, int, double) FunctionName(string ID) { ... //第1个返回值 string a2 = ""; //第2个返回值 int a3 = 1; //第3个返回值 double a4 = 1.20; //第4个返回值 ...
  • c语言||函数产生多个返回值???? 一天,我正愉悦地写着函数,突然,我想让这个函数返回多个值, 一下子懵逼了呀 无奈之下,只好翻阅资料,整理了这篇文章 本文的结构如下: 1.三种函数返回多个返回值的方法: ​ ...
  • 返回值返回值类型 前向引用 内部/内嵌函数 函数装饰器 传递函数 参数的种类 位置参数 参数默认值 命名关键字参数 关键字参数:**others,便于函数功能的扩展 任意的参数列表 *others 解包参数列表 ...
  • const用于修饰函数时,一般是const修饰类的成员函数函数定义体),表示在函数体中成员变量不能改变; 其函数形式为:int ff(void)...又如给"指针传递"的函数返回值加const,则返回值不能被直接修改,且该返回值
  • java中 返回值为boolean的函数的默认返回值是什么定义了一个返回值为boolean的函数,比如public boolean foo(), 如果在boolean的函数的默认返回值是return true return true; 的意义是 :这个方法的返回类型是...
  • const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。 const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++...
  • C语言函数个返回值

    千次阅读 2020-04-21 20:40:50
    函数返回多值 在平时项目中,我们会遇到一个函数要返回多值的问题。但是c语言规定一个函数只能返回一值,也就是说我们不能用return一变量的方式返回多值。那该怎么办呢? 其实很简单,结构体轻而易举实现...
  • const 修饰函数的参数和作为返回值

    千次阅读 2019-01-25 20:10:34
    const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。 const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++...
  • python函数个返回值

    万次阅读 2018-09-21 14:45:56
    python函数可以返回多值吗?答案是肯定的。 比如在游戏中经常需要从一点移动到另一点,给出坐标、位移和角度,就可以计算出新的新的坐标: import math def move(x, y, step, angle=0): nx = x + step * ...
  • 函数指针,指针函数返回值为指针的函数

    万次阅读 多人点赞 2017-06-08 21:23:17
    在学习C语言时,一比较容易混淆的概念就是函数指针、指针函数返回值为指针的函数。本文将对这三概念进行区分。指针函数就是返回值为指针的函数,两本质上是同一事物,只是叫法不同。函数指针就是一指向...
  • Lua函数的多个返回值【转】

    千次阅读 2017-04-02 21:13:04
     Lua中的函数的一个很特殊也很有用的性质,即可以有个返回值。包括一些内置的函数就是这样。比如string.find函数,在给定的字符串中查找一个pattern,如果有匹配的部分,则返回对应的头、尾的两个索引值;如果不...
  • 种C语言函数的参数与返回值 数组做函数参数 凡是变量可以出现的地方,都可以用数组代替,数组元素也可以用作函数实参,其用法与变量相同,向形参传递数组元素的值,数组名也可以实参和形参,传递的是数组第一...
  • getch()函数的使用方法及其返回值问题

    千次阅读 多人点赞 2019-10-06 16:11:00
    getch函数从控制台读取单个字符而不回显,函数不能去读取CTRL+C,当读取一功能键或方向键,函数必须调用两次(这就说明可以用这个函数去监控功能键和方向键),第一次调用返回0或0xe0,第二次返回实际...
  • C# 函数个返回值 解决办法

    千次阅读 2020-04-20 17:36:41
    编程中经常遇到个返回值的情况,下面提供了种方法供参考。 方法一: GetPerson(out var Name, out var Age, out var Male); Debug.Log(Name + " " + Age + " " + Male); public void GetPerson(out string ...
  • python函数个返回值You can return many values from a function in Python. 您可以从Python中的函数返回许多值。 To achieve this, return a data structure with several values, such as a list of the total ...
  • html> html> head> meta charset="UTF-8"> title>无参函数title> script type="text/javascript"> /** * 无参函数 */ function print() { document
  • 拿JS异步函数返回值种方式

    万次阅读 2018-08-31 13:54:13
    在我们的编码过程中,为了满足业务需求,经常...1,通过回调函数的方式来拿返回值,这想必大家不会陌生 function getSomething(cb) { var r = 0; setTimeout(function() { r = 2; cb(r)//回调函数 },10) }...
  • c语言函数返回值问题

    千次阅读 2017-04-23 22:00:06
    C语言中,调用函数结束时,如果有返回值,会涉及到函数返回值传递问题,根据返回值的大小,会不同的处理方式。 一、返回值小于等于4字节 函数执行完毕后,如果返回值小于等于4字节,则会将值保存在寄存器eax中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 479,054
精华内容 191,621
关键字:

函数可以有几个返回值