函数的执行过程——按值传递

上一篇博客我大概介绍了函数的由来和函数的执行过程,接下来,我要说明一下函数在执行的时候参数的传递方式——按值传递。

首先先用C++给大家写个函数,这个函数的功能是比较两个数的大小。然后函数参数在栈中的传递过程我会给大家贴张图。

<span style="font-family:KaiTi_GB2312;font-size:18px;">#include<iostream>
using namespace std;

int max(int x ,int y)
{
    int z;
    z = (x>y) ? x:y;
    return z ;
}

void main()
{
    int a,b;
    cin>>a>>b;//输入将要比较大小的两个数
    cout<<max(a,b)endl;
}</span>

从上一篇博客我们可以看出,函数调用过程实际上执行了一个参数传递---->执行函数体---->返回的过程,其中的函数参数传递的实质是将实参值通过栈控件一一传递给形参的过程,这种把实参表达式的值传递给相对应的形参变量传递方式称为“按值传递”。

给大家贴张函数执行过程中栈内存和执行代码内存的图片

在这张图片中中push()叫做压栈,pop()叫做出栈,在栈中中的数据,先进后出。结合这张图片,我们能很好的理解函数调用过程中内存是怎样为函数“服务”的啦。

三、小结

传值调用简称值调用。值调用时,实参仅将其值赋给了形参,因此,在函数中对形参的值无论咱么修改也不会影响实参的值。

时间: 2024-08-23 12:46:21

函数的执行过程——按值传递的相关文章

python函数得执行过程

对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束,才将控制权还给调用者. 前文介绍过,当执行 Python 代码时,会先将代码编译成字节码,然后在虚拟机中解释执行字节码,编译好的字节码会保存在 .pyc 或 .pyd 扩展名的文件里.在运行时,虚拟机会创建字节码执行的上下文环境,Python 模拟 C 语言中的运行栈作为运行时的环境,使用PyFr

JavaScript 函数的执行过程

每一个JavaScript函数都是Function对象的一个实例, 它有一个仅供JavaScript引擎存取的内部属性[[Scope]]. 这个[[Scope]]存储着一个作用域的集合, 这个集合就叫”作用域链”, 集合中存储着”可变对象”VO或”活动对象”AO(AO比VO多this和arguments属性). 当函数被创建后, 其父级作用域的作用域链中的所有可变对象会被加入到它的[[scope]]中(如果父作用域是全局, 那么当前函数的作用域链中就只会加入一个全局对象). 当函数被执行时, 函

fork()函数的执行过程、孤儿进程和僵尸进程

说起fork就不得不提COW(Copy On Write),就是"写时拷贝".也就是当fork发生时,子进程根本不会去拷贝父进程的内存页面,而是与父进程共享.当子进程或父进程需要修改一个内存页面时,Linux就将这个内存页面复制一份给修改者,然后再去修改,这样从用户的角度看,父子进程根本就没有共享什么内存.COW也就是进程要写共享的内存页面,先复制再改写. 采用了COW技术后,fork时,子进程还需要拷贝父进程的页面表.这种拷贝的代价就非常小了,对于CPU来说用不了几个时钟周期. 1.

Linux中Main函数的执行过程

1. 问题:Linux如何执行main函数. 本文使用一个简单的C程序(simple.c)作为例子讲解.代码如下, int main() { return(0); } 2.  编译 -#gcc -o simple simple.c 3. 查看可执行文件的基本信息 -#objdump -f simple simple: file format elf32-i386 architecture: i386, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED sta

电脑从开机加电到操作系统main函数之前执行的过程

总的来说在操作系统加电启动之后到main函数执行之前操作系统经历了以下3个大步骤 1.启动BIOS.这个时候位于实模式下,加载中断向量和中断服务程序 2.加载操作系统内核并为保护模式做准备.这个时候操作系统一共加载了3部分代码:引导程序bootsect,内核代码setup,内核代码system模块 3.从实模式转换为32位保护模式.这个过程要做大量重建工作,并且持续工作到操作系统main函数的执行过程.细说的话,主要包括打开32位寻址空间,打开保护模式,建立保护模式下的中断相应机制与保护模式配套

加法运算符重载为从成员函数执行过程

今天学习了运算符重载函数,测试了复数类加减运算符的重载,不明白运算符重载函数的执行过程,重点探究一下: 首先贴出源代码 // example_1_2_cl_dt_fushujiajian.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; class complex { public: complex(double r=0.0,double i=0.0){re

《Linux内核分析》第七周笔记 进程的切换和系统的一般执行过程

20135132陈雨鑫 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 一.进程调度与进程调度的时机分析 1.进程调度 不同类型的进程有不同的调度需求 第一种分类:       I/O-bound            频繁的进行I/O           通常会花费很多时间等待I/O操作的完成     CPU-bound            计算密集型          

函数调用的执行过程

函数,英文名称function,function的更贴切的意思是"功能"或者是说"作用",但是在中国为什么将function翻译成函数,我非常不理解,也许函数这个名称更加"高大上"的缘故吧! 一.函数的由来 一个程序经常会通过多次执行相同或者相近功能的程序段来完成,在早期的程序设计中,这些重复的功能段必须通过重复书写代码来实现.这样,不仅会引起重复的劳动.增加程序的长度.造成代码的不一致,而更重要的是,大量重复的程序代码不利于程序的立即与理解.

实验八 进程的切换和系统的一般执行过程

实验八 进程的切换和系统的一般执行过程 20135114王朝宪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关键代码switch_to分析 1.1 进程调度与进程调度的时机分析 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已. 对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制