弄不懂为什么我调用函数return的值怎么输出返回值为0?

在C++或则C中,不同的开发平台有不同的main函数形式。
一般正常返回时使用return 0;
关于这个返回值,返回值并不是返回给程序的其他部分,而是返回给操作系统。
UNIX外壳脚本和windows命令行批处理文件都被设计成运行程序, 
并测试它们的返回值(通常叫做退出值)。
退出值为0意味着程序运行成功, 为非零则意味存在问题。
postscript:关于退出时的返回值,类似机制的还有C语言exit();函数。
return将运行控制权移交给上一级,直到在最初的那一级,
再次使用return才会退出结束运行。
exit();直接结束程序,即使函数递归或者嵌套,都将结束整个程序运行,
而不是仅仅结束某个子函数。

}

(1) 形参之间用逗号分割,每个形参前面的类型必须写明

(2)可以接受0个或多个参数

(1)实参可以是常量、变量或表达式

(2)即使没有参数,()必须有

(3)调用其他函数的函数成为主函数,如main(),被调用的函数称为被调函数

}形参必须是变量,实参可以是常量、变量或表达式 形参和实参应一一对应,数量相同,类型一致。实参的值依次传递给形参

(1)return 只能返回一个值

(2)函数执行过程中遇到return 停止执行,并返回一个值

用途:传给变量赋值、再传给函数、输出返回值

(3)void不能省略,若省略。函数默认返回类型为int

(1)获取参数类型,值返回类型,函数名

(2)参数名可以不用写。

若形参与实参类型不同,编译器会帮忙转换。实参类型-->形参类型

每个函数都有自己的变量空间,参数也位于这个独立空间内,和其他函数无关

定义在函数内部的变量就是本地变量

  1. 本地变量是定义在块内的。
  • 它可以是定义在函数的块内
  • 也可以定义在语句的块内
  • 甚至可以随便拉一对大括号来定义变量

    2. 程序运行进入这个块之前,其中的变量不存在,离开这个块, 变量就消失了。

3. 块外面定义的变量在里面仍然有效

4.  块里面定义了和外面同名的变量则掩盖了外面的。

5. 不能在一个块内定义同名的变量


6. 本地变量不会被默认初始化


7. 参数在进入函数的时候被初始化了

因为实参给形参传递值了,这个值初始化参数了

(1)函数不能嵌套定义

(2)逗号运算符 与 函数调用的括号区分

这个括号没什么意义 ,还容易使人误解调用return 函数

把0返回给调用它那个的代码.  之后上报给系统(windows),执行相应功能

若返回为非0 ,一般会出错

这样写,有的编译器会报错的

定义在函数外,而不属于任何函数的变量称为全局变量

定义全局指针,默认NULL

{int x=4; //x为局部变量,在本函数中,全局变量x不起作用,所以x的值不变return x;

(3) 全局变量尽量不要有联系

 (2)只能作用于所定义的函数内

赋值,只在第一次调用起作用。若没有赋值,默认为0

//某个函数(求阶乘)
 

(3)静态局部变量就是特殊的全局变量

 
本地变量c位于另一个内存区域

本地作用域(函数内的局部作用域,只能在函数内部访问)

  • 返回本地变量地址的函数很危险

f和g两个函数之间存在什么关系?为什么f里的i和g里的k的地址是一样的?

f函数调用完以后,占用的内存就释放了,这时候立马就调用g函数了,将f函数释放的内存又分配给g函数了,这样f里的i和g里的k的地址就是一样的了

A选项,没有写参数,则是不定型参数,是可以定义的

D选项,类比int main()函数。 要有返回值

对于不返回值而且只有一个int类型的参数的函数,以下哪些函数原型是正确的?  A,B,C

B选项,不定型参数。编译器会根据函数调用时,你给的参数判断

D选项,没有参数的类型

}输出:3,8先调用swap()函数,因为没有传参数,所以使用的是全局变量,进行交换。之后退出函数,返回main()函数里,因为main()函数定义了x,y.所以又把全局变量给掩盖了,所以输出的是3,8
}

文章目录1,什么是构造函数2,为什么要使用构造函数? 3、执行构造函数步骤4、构造函数返回值5构造函数的首字母必须大写吗? 如果不使用new关键字直接运行构造函数,会出现错误吗? 如果不会出现错误,那么使用new和不使用new调用构造函数有什么不同呢?

作为原型和原型链的基础,为了更好地了解原型和原型链的知识,必须了解构造函数及其运行过程。

1、构造函数为JavaScript,用new关键字调用的函数是什么? 被称为构造函数。 构造函数的首字母通常是大写的

2、为什么要用构造函数? 要学习所有的概念,不仅要知道它是什么,还要知道为什么,以及解决什么问题。

例如,如果要输入一年级班每个同学的个人信息,可以创建以下对象:

name: 'zl ',age: 6,gender: '男',hobby: 'football' }; //如上所述,我们可以把每个同学的信息作为一个对象来对待。 但是,你会发现我们重复写了很多没有意义的代码。 例如,name、age、gender和hobby。 如果这个班有60个学生,我们必须重复写60次。

此时,构造函数的优势显现出来。 我们发现所有同学都有name、gender、hobby这些属性,但它们都不一样。 那么,将这些属性作为构造函数的参数传递。 因为是一年级学生,age几乎都6岁了,所以我们写死了,特殊情况后单独处理就可以了。 此时,可以创建以下函数:

因此,封装构造函数的过程很麻烦,但一旦封装成功,重新创建对象就变得非常简单。 因此,必须使用构造函数。

使用对象文字创建同一类型的一系列对象时,这些对象可能具有一些类似的特征(属性)和行为(方法)。 在这种情况下,会生成很多重复代码,但构造函数允许代码重用。

3、构造函数的执行过程先说一点基本概念。

功能动画(color ) { this.color=color; }创建函数后,不知道它是否是构造函数。 如上例所示,即使函数名称为大写,也无法确定。 只有在用new关键字调用函数时,才可以说它是构造函数。 如下所示。

)1)使用new关键字调用时,将创建新的内存空间并将其标记为Animal的实例。

)2)函数主体内部的this指的是这个内存

通过以上两个步骤,我们可以得出这样的结论。

(3)执行函数体内的代码

根据以上说明,向this添加属性是指

由于函数体内部的this指向新创建的内存空间,默认返回 this ,就相当于默认返回了该内存空间,也就是上图中的 #f1。此时,#f1的内存空间被变量p1所接受。也就是说 p1 这个变量,保存的内存地址就是 #f1,同时被标记为 Person 的实例。

以上就是构造函数的整个执行过程。

构造函数执行过程的最后一步是默认返回 this 。言外之意,构造函数的返回值还有其它情况。下面我们就来聊聊关于构造函数返回值的问题。

(1) 没有手动添加返回值,默认返回 this

按照上面讲的,我们复习一遍。首先,当用 new 关键字调用时,产生一个新的内存空间 #f11,并标记为 Person1 的实例;接着,函数体内部的 this 指向该内存空间 #f11;执行函数体内部的代码;由于函数体内部的this 指向该内存空间,而该内存空间又被变量 p1 所接收,所以 p1 中就会有一个 name 属性,属性值为 ‘zhangsan’。

(2) 手动添加一个基本数据类型的返回值,最终还是返回 this

如果上面是一个普通函数的调用,那么返回值就是 50。

(3) 手动添加一个复杂数据类型(对象)的返回值,最终返回该对象

6不用new关键字,直接运行构造函数,是否会出错?如果不会出错,那么,用new和不用new调用构造函数,有什么区别? 使用new操作符调用函数

用new调用构造函数,函数内部会发生如下变化:

创建一个this变量,该变量指向一个空对象。并且该对象继承函数的原型;
属性和方法被加入到this引用的对象中;
隐式返回this对象(如果没有显性返回其他对象)
用伪程序来展示上述变化:

可以看出,用new调用构造函数,最大特点为,this对象指向构造函数生成的对象,所以,person1.say()会返回字符串: “I am 搞怪的泥猴桃”。

如果指定了返回对象,那么,this对象可能被丢失。

如果直接调用函数,那么,this对象指向window,并且,不会默认返回任何对象(除非显性声明返回值)。

还是拿Person函数为例,直接调用Person函数:

可见,直接调用构造函数的结果,并不是我们想要的。

为了防止因为忘记使用new关键字而调用构造函数,可以加一些判断条件强行调用new关键字,代码如下:

}

我要回帖

更多关于 return的值怎么输出 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信