精华内容
下载资源
问答
  • //调用func函数,并将它的返回值作为左值 system("pause"); return 0; } 我用的vs2019 输出结果: 有参构造函数! 有参构造函数! 拷贝构造函数! 析构函数! 析构函数! 析构函数!...
  • 函数的返回值

    2020-04-28 20:25:38
    函数的返回值,即函数自身的处理数据或执行结果 为什么要有返回值? 方便函数执行结果的二次使用,或在其他程序调用,需要将结果返回出来; 关键字:return return可以指定函数的返回值; return执行后,当前函数...

    函数的返回值,即函数自身的处理数据或执行结果
    为什么要有返回值?
    方便函数执行结果的二次使用,或在其他程序调用时,需要将结果返回出来;
    关键字:return

    • return可以指定函数的返回值;
    • return执行后,当前函数结束;
    • 一个函数可以有多个return但是只能执行一次return 且一次只能返回一个数据;
    • 可以返回所有数据,包括返回一个函数,当返回值是一个函数时,就形成了闭包的概念
    • 函数的返回值是返回到函数的执行语句上即:fn(),即执行函数也代表函数的返回值;
    • 如果一个函数没有返回值,则默认返回值为undefined
      例如:
    function add(a,b){
            console.log(a);
            console.log(b);
            return a - b;
        }
        console.log(add(3,2));
    

    结果:
    在这里插入图片描述
    add(3,2)表示函数正常执行,同时,我能还打印了函数的返回值;

    返回值是函数必须的吗?
    不一定
    功能函数一般没有返回值,因为功能函数一般是为了实现某些功能,而数据处理函数一般是有返回值的(比如说输入半径得到面积,得到1-10的和)那么,这时候我们就会吧函数的处理结果作为返回值返回到程序的执行语句上,方便二次使用,也方便其他程序调用

    关于返回值为函数时
    当函数的返回值为一个函数时,就成了闭包的概念;

    function print(a){
            console.log(a)
            return function(b){
                console.log(b);
                return a+b;
            }
        }
        console.log(print(2));
    

    结果:
    在这里插入图片描述
    那么我们如何调用返回值中的函数呢,没错就是再加个():
    在这里插入图片描述

    结果:
    在这里插入图片描述

    展开全文
  • len函数返回序列类型对象(字符或字符串、... 参数是序列类型对象(字符、字符串、列表、元组或者是字典):test = [1, 3, 5, 'sdw']print(len(test))程序的返回值是4.2. 参数是非序列对象:print(len(45.36))...

    len函数返回序列类型对象(字符或字符串、元组、列表和字典等)的项目个数(长度)。

    语法len(object)

    函数返回一个大于0的int型整数,表示对象的项目个数。

    参数说明

    举例

    1. 当参数是序列类型对象(字符、字符串、列表、元组或者是字典)时:test = [1, 3, 5, 'sdw']

    print(len(test))

    程序的返回值是4.

    2. 当参数是非序列对象时:print(len(45.36))

    运行报错:Traceback (most recent call last):

    File "/Users/untitled3/myapps/Test.py", line 1, in

    print(len(45.36))

    TypeError: object of type 'float' has no len()

    注意事项

    1. 当参数是字典时,len函数返回的是字典中的键值对数量

    2. 当参数是非序列对象时,Python会报错

    推荐学习,《python教程》。

    展开全文
  • 函数的返回值保存在内存的什么区域呢? 1、结构体大小不超过4字节,那么仍然使用EAX寄存器传递返回值 2.结构体超过4字节但不等于8字节,调用者将首先在栈上分配一块能容纳结构体的临时内存块,然后在传递完函数...

    函数的返回值保存在内存的什么区域呢?
    1、结构体大小不超过4字节,那么仍然使用EAX寄存器传递返回值
    2.结构体超过4字节但不等于8字节时,调用者将首先在栈上分配一块能容纳结构体的临时内存块,然后在传递完函数参数后将该临时内存块的首地址作为隐含的第一个参数最后(因为压栈顺序是从右到左)压栈,接下的动作同前所述。当被调用函数返回时,它会通过第一个隐含参数寻址到临时内存块并将返回值拷贝到其中,然后将保存有返回值内容的临时内存块的首址存进eax寄存器中,
    3、结构体大小刚好为8个字节时编译器不再于栈上分配内存,而直接同时使用EAX和EDX两个寄存器传递返回值,其中EAX保存低4字节数据,EDX保存高4字节数据。

    函数在定义时,必有其返回类型,返回类型可以为数值型(指针是表示地址的数值),void类型。函数只能返回一个值,数值形式可以是4字节的整型,浮点,8字节大小的long long,还可以返回结构体类型。虽然返回的都是数值,但是其中的返回机制不同。

    函数的局部变量定义在栈中,栈的特点后进先出(LIFO)。局部变量所在的栈的高地址在下,低地址在上。从main开始,申请变量时栈顶指针向上移动,进入局部变量,局部变量的申请同在main函数中一样,一旦子函数执行完毕,则栈顶指针下移到进入局部变量时的位置,子函数所申请的局部变量空间都被回收。所以如果函数需要子函数中的一些值时,可以通过返回该数据来获得(用指针间接访问变量无需返回)。

    1)讨论整型,浮点型,指针等4字节大小的数值。
    以下一个函数来举例说明:
    int add(int x,int y){
    int z=x+y;
    return z;
    }

    int main(){
    int sum=add(3,4);
    return 0;
    }
    该函数返回部分的汇编代码:
    return z;

    001813F7 8B 45 F8 mov eax,dword ptr [z]
    return这一段中,可以看到z中计算好的数据移到eax寄存器中,由eax寄存器将值带给调用该函数的函数变量。

    在返回这些类型时,系统将该函数所要返回的值移到寄存器中,栈顶指针下移,栈中的局部变量都死亡,寄存器中的数据再返回给调用该函数的函数所要接收的变量。

    2)讨论longlong等8字节大小的数值。
    在32bit的编译环境中,eax寄存器一次性只能接受传递4字节大小的数据,而8字节的大小显然靠它一次性是不能完全拿到的。

    代码为将上述的int改为long long类型。

    函数返回部分的汇编代码:
    return z;

    000C1400 8B 45 F4 mov eax,dword ptr [z]
    000C1403 8B 55 F8 mov edx,dword ptr [ebp-8]
    该函数的返回机制与4字节的相似,只是由两个寄存器来返回该值,其中将long long字节分为两部分移到eax和edx两个寄存器,通过这两个寄存器将函数值返回。

    3)返回结构体类型的数据
    一个结构体变量中可以包含多个不同数据变量,其大小很容易超过8字节,如果靠多个寄存器来实现将值带回到调用函数中,很不现实。

    函数举例:
    typedef struct {
    ​int num;
    char name[19];
    char sex;
    float score;
    }student;

    student test(){
    student stu;
    strcpy(stu.name,“xiaoming”);
    stu.num=1001;
    stu.score=99.9;
    stu.sex=‘M’;
    return stu;
    }

    int main(){
    student su;
    su=test();
    return 0;
    }
    该函数的返回类型为student结构体类型,该类型的大小为28字节。

    函数返回部分的汇编代码:
    return stu;

    00DD3B81 B9 07 00 00 00 mov ecx,7
    00DD3B86 8D 75 DC lea esi,[stu]
    00DD3B89 8B 7D 08 mov edi,dword ptr [ebp+8]
    00DD3B8C F3 A5 rep movs dword ptr es:[edi],dword ptr [esi]

    return stu;

    00DD3B8E 8B 45 08 mov eax,dword ptr [ebp+8]
    在进入该子函数之前,系统在栈中为该函数留下一段内存,在函数返回该类型数据时,先是寄存器将其中的数据移到该段空间,子函数中的数据死亡,再由该段空间将值返回到调用函数的变量中。该方式的代价比较大,消耗了空间,并且在复制移值中也占用了cpu及寄存器等资源,所以指针间接访问来提高代码的效率。

    展开全文
  • 函数的调用以及完成调用的过程是函数在栈内存中入栈和出栈的过程,当函数被调用,函数入栈,当函数调用完成之后,系统负责把函数占用栈内存自动释放,所以存在栈中的局部变量的占用的内存得到释放,如果此时把当前...
    • 函数的调用以及完成调用的过程是函数在栈内存中入栈和出栈的过程,当函数被调用
    • 时,函数入栈,当函数调用完成之后,系统负责把函数占用栈内存自动释放,所以存在
    • 栈中的局部变量的占用的内存得到释放,如果此时把当前局部变量的指针或引用返回给
    • 外部,外部函数得到的只是一个野指针或者一个空引用,会引起内存泄露。
    展开全文
  • 当函数中有return语句,return语句的结果就是函数的返回值。如图,函数返回值为x+1,其中x为函数的参数。2、隐含返回值。如果函数中没有return语句,函数没有明显的返回值,但其实函数是有一个隐含的返回值,类型...
  • 其中type为函数的返回值,name 函数的标识符,P1,P2函数的两个参数,该参数作用范围仅在该函数体内。 一个函数不要返回任何值,该函数空函数,其类型void,该函数也没有参数,也可以用void表示无...
  • 看手册,一眼看上去,觉得mysql_query()函数返回本来就是资源类型,可是为什么现在又是bool值了呢?好吧,耐心看完手册,才发现,原理是这样,如下图片: 总结:由上可以知道,mysql_query()执行sql语句...
  • 使用箭头函数有对象返回值时,可以简写 const func = ()=>({name:''wudada}); //表示return 一个对象{name:'wudada'} //为什么不是这样 const func = ()=>{name:''wudada}; //因为直接{},会被解析为一系列...
  •  首先我们先看一下C程序的返回值处理情况,我们知道C函数返回int等小型数据直接将返回值放入eax寄存器。那返回大的数据结构又是如何处理呢?看如下一段代码:   #include  typedef struct big_thing  { ...
  • 顾客想买11个包子,大叔就会选2笼3个再加1笼5个(也可能选出1笼3个再加2笼4个)。 当然有时包子大叔无论如何也凑不出顾客想买数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子...
  • 为什么线程函数不能有返回值

    千次阅读 2009-07-02 11:18:00
    线程执行本身是一个异步过程,如果线程有返回值,那又该如何接收这个值呢。线程结束,程序已经不是调用处状态。
  • [Perl]对非标量函数返回值的处理

    千次阅读 2009-03-06 11:29:00
    函数的返回值肯定不可能只是标量,当返回值为多个,我们可以把返回值放入列表,这是很正常的。但是如果函数的其中一个返回值不是标量,情况会是什么样子?#!/usr/bin/perlsub get_value{ my $err = 0; my @arr1; ...
  • 代码实现:需要解答地方:为什么check方法两个判断分支,要有return,笔者已经测试过了,如果不return,两项都为空,只能检测出生日不能为空,而且页面会跳转到新界面,不能检测邮件不能为空,疑问是if...
  • 过程:没有返回值的函数 1为什么说python只有函数,没有过程?也就是python的函数实际上都有返回值,当函数没有返回值,它返回None >>> def haha(): ...None #函数的返回值为None 2函数如何返回多个值
  • socket返回值为0问题

    万次阅读 2020-04-15 14:50:13
    二、什么情况下socket返回值为0 1. 如果我们调用close(0)之后,socket_id = 0便处于“空闲”状态。用户利用socket函数创建套接字,便可能会将0分配给新创建socket。 这种情况下,一般是套接字声明...
  • 我们定义一个函数,逻辑上函数的作用域是全局的,既可以是定义前,也可以是定义后。如 1 <?php 2 foo(); 3 function foo(){ 4 echo 'abc'; 5 } 6 ?> 他是可以正常执行的。为什么呢?简单说...
  • 数组作函数的参数和返回值

    千次阅读 2010-07-16 12:01:00
    数组作为函数参数,调用函数实参数组只是传送该数组在内存中首地址,即调用函数通知被调函数在内存中的什么地方找到该数组。在前面我们已经知道了函数参数值传递方式,调用函数向被调函数传递数据地址...
  • 你可能会奇怪为什么会讨论方法返回Mockito怎么样Mock返回值为方法?Mockito这个类是很轻松mock带有返回值方法。但是遇到没有返回值方法,就非常麻烦了。下面提出解决方法:public class People{public...
  • return 0 ; 代表正常退出 return 1 ; 代表异常退出 return ; void 返回空, 也可以什么也不返回 return NULL; 数据类型指针,正常退出返回NULL;
  • 编译器能从上下文中唯一的确定函数的意思,如int x = f();这是没有问题的。然而,在C/C++中我们总是可以调用一个函数但忽略它的返回值,即调用了函数的副作用,在这种情况下,编译器不知道调用的哪个函数,而且...
  • 类型void* 说明了什么的返回值

    千次阅读 2011-11-13 10:52:28
    1.将无返回值的函数定义void类型,表示函数没有返回值 2.用void*定义指针,这是一个指向非具体数据类型指针,称为无类型指针,或者通用型指针变量,一般在使用时候通过强制转化,可以给其他类型指针变量...
  • 一个方法,根据判断 可能返回一个int型数据, else 返回一个string型数据。... lz,因为可能返回两种不同类型数据,那么用此函数为变量赋值,变量应该是什么类型呢? 建议lz换种语言,比如j
  • 实现函数的文件:   <code>#include <stdio.h> #include "hotel2.h" //实现头文件中声名的函数 int Choice(void)//显示酒店名称,提示用户选择,返回用户的选择 { int i;//...
  • 了解过php curl_exec函数的知道,它是执行给定的cURL会话。如果成功返回 TRUE, 或者在失败返回 FALSE。有的时候PHP 使用curl请求的时候,页面空白,什么也不输出。调试发现返回结果:false,遇到这种情况...
  • 本来我的猜想是:如果没有显式的return,如果当前函数最后一行是个有返回值的函数,返回这个函数的返回值,如果是个没有返回值的函数或是个表达式,则返回0,但是下面的代码打破了我的猜想,请问为何?...
  • 如果是类的静态成员函数,可以如果是类的普通成员函数,不可以为什么?《深入探索C++对象模型》中提到成员函数成员函数不是静态的,虚函数,那么我们有以下结论:(1)&类名::函数名获取的是成员函数的实际...
  • 充当返回值,当初我们并不知道这个返回值的意义是什么,我们经常使用的是普通函数中的返回值当函数执行一个任务,函数执行完毕之后总会返回一个适当的值来告诉执行者该函数执行的情况 Linux 下,在terminal下,...
  • 前几天在学装饰器的时候,关于装饰器内层函数调用目标函数是否return目标函数的调用产生了一点迷惑,事实是被装饰的目标函数有返回值的时候,装饰器内层函数也必须返回该目标函数的调用。我们都知道不带括号的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 575
精华内容 230
关键字:

当函数的返回值为什么时