!函数返回值

合集下载

c语言函数参数返回

c语言函数参数返回

c语言函数参数返回

**引言**

C语言作为一种面向过程的编程语言,函数是其核心组成部分。在C语言中,函数可以返回一个值,这个返回值可以用于后续操作。本文将详细介绍C 语言函数的返回值及其使用方法。

**C语言函数返回值类型**

C语言中,函数返回值的类型由函数定义中的返回类型指定。返回类型可以是整型、浮点型、字符型等基本数据类型,也可以是用户自定义的结构体、枚举等复杂数据类型。

**函数参数的传递方式**

在C语言中,函数参数的传递方式分为两种:值传递(传值)和指针传递。值传递是将实参的值复制一份传递给形参,而指针传递是将实参的地址(即指向实参的指针)传递给形参。需要注意的是,函数内部对参数进行的操作并不会影响到实参的值。

**函数返回值的设置与使用**

1.设置返回值:在函数体内,使用`return`关键字设置返回值。返回值可以是常量、变量或表达式。

2.使用返回值:在调用函数的地方,使用`变量名`或`表达式`来接收返回值。需要注意的是,接收返回值的变量必须与返回值类型匹配。

**常见问题与实用技巧**

1.函数返回值类型与参数类型不匹配:在调用函数时,需要注意函数的返

回值类型与接收返回值的变量类型是否匹配,否则会导致编译错误。

2.空指针问题:当函数返回值为指针类型时,需要注意空指针的处理。如果函数返回了一个空指针,需要检查是否是内存泄漏或其他问题。

3.递归调用:当函数调用自身时,需要注意返回值的处理。递归函数需要有一个终止条件,并在递归调用时修改返回值,以避免无限递归。

**结论**

C语言函数返回值是函数的一个重要功能,掌握返回值的设置与使用方法对于编写高效、可靠的程序至关重要。

函数的返回值、函数的调用、函数的参数

函数的返回值、函数的调用、函数的参数

函数的返回值、函数的调⽤、函数的参数1、函数的返回值

'''

1、什么是返回值

返回值是⼀个函数的处理结果,

2、为什么要有返回值

如果我们需要在程序中拿到函数的处理结果做进⼀步的处理,则需要函数必须有返回值

3、函数的返回值的应⽤

函数的返回值⽤return去定义

格式为:

return 值 --------(值可以是是以数据类型)

注意:

1、return是⼀个函数结束的标志,函数内可以有多个return,

但只要执⾏⼀次,整个函数就会结束运⾏------即函数下⾯有再多代码也不会被执⾏

2、return 的返回值⽆类型限制,即可以是任意数据类型------------如整型、字符串、列表、元组、等

3、return 的返回值⽆个数限制,即可以⽤逗号分隔开多个任意类型的值

0个:返回None,ps:不写return默认会在函数的最后⼀⾏添加return None------即没有return函数代码运⾏完毕也会结束运⾏

1个:返回的值就是该值本⾝

多个:返回值是元组--------------------调⽤函数会将多个任意类型的值放到元组中返回

'''

# def max2(x,y): #x=3000,y=2000

# if x > y:

# return x #return 3000

# else:

# return y #reuturn 2000

#

# res=max2(3000,2000) #函数正常调⽤,赋值给⼀个变量,可以拿到⼀个返回值

#

# # annual_salary=res * 12 #函数当做⼀个参数,做进⼀步的处理如运算

c语言逻辑运算符的返回值

c语言逻辑运算符的返回值

c语言逻辑运算符的返回值

C语言逻辑运算符的返回值

在C语言中,逻辑运算符用于对表达式进行逻辑判断,并返回一个布尔值,即真(true)或假(false)。逻辑运算符有三种:与(&&)、或(||)和非(!),它们在逻辑判断中起到了不可或缺的作用。

1. 与运算符(&&)

与运算符表示同时满足两个条件时返回真,否则返回假。当两个操作数都为真时,表达式的结果为真;只要有一个操作数为假,表达式的结果就为假。与运算符的返回值只有两种可能,即真或假。

例如,判断一个数是否在某个范围内:

```c

int num = 5;

if (num > 0 && num < 10) {

printf("num在0和10之间\n");

} else {

printf("num不在0和10之间\n");

}

```

上述代码中,当num的值为5时,表达式`num > 0 && num <

10`的结果为真,因此会输出"num在0和10之间"。

2. 或运算符(||)

或运算符表示只要满足其中一个条件即可返回真,只有当两个操作数都为假时,表达式的结果才为假。或运算符的返回值也只有两种可能,即真或假。

例如,判断一个数是否为正数或者为零:

```c

int num = -5;

if (num > 0 || num == 0) {

printf("num为正数或零\n");

} else {

printf("num为负数\n");

}

```

上述代码中,当num的值为-5时,表达式`num > 0 || num == 0`的结果为假,因此会输出"num为负数"。

excel中函数的组成

excel中函数的组成

excel中函数的组成

Excel中的函数是一种非常强大的工具,它能够使我们快速地完成各种计算任务。通常,一个函数包括函数名称、参数、函数返回值等部分。具体来说,Excel中的函数由以下几个组成部分:

1. 函数名称

函数名称是一组由Excel预定义的单词或者字母组成的标识符,用来标识函数的类型。例如,对于求和函数,函数名称为SUM。当我们使用一个函数时,必须要指定该函数的名称。

2. 参数

函数的参数是传递给函数进行计算的变量或者数值。参数可以是一个数值、一个单元格引用,或者是其他函数的返回值。每个函数的参数类型和数量是不同的,需要通过具体的帮助文档进行查看。

3. 函数返回值

函数返回值是指当函数完成计算后,返回给用户的结果。在Excel中,函数的返回值通常是一个数字、一个字符串、一个日期或者是一个逻辑值。当函数没有返回值时,返回一个空值或者错误值。

4. 函数语法

函数语法指的是函数的具体写法和使用方式。每个函数都有特定的语法格式,需

要按照该格式进行正确的使用。Excel提供了详细的函数语法帮助文档,供用户参考。

5. 函数分类

函数分类是指将所有函数按照功能或者用途进行分类整理,使得用户能够更加方便地查找和使用函数。在Excel中,函数可以分为数学函数、统计函数、逻辑函数、日期和时间函数、文本函数等等。每个函数都有其特定的功能和用途。

总之,Excel中的函数是一种非常强大且灵活的工具,现在我们已经知道了Excel 函数的组成部分。正确地使用Excel函数可以大大地提高工作效率,同时也可以让我们对Excel的功能有一个更加深入的理解。

matlab中函数返回值

matlab中函数返回值

matlab中函数返回值

函数返回值为标题的文章

在MATLAB中,函数返回值是非常重要的概念。函数返回值是指函数执行完毕后返回给调用者的结果。这个结果可以是一个数值、一个向量、一个矩阵、一个结构体、一个单元数组等等。在本文中,我们将以MATLAB中函数返回值为标题,来探讨函数返回值的相关知识。

1. 数值型返回值

数值型返回值是指函数返回一个数值。例如,我们可以定义一个函数,计算两个数的和。这个函数的返回值就是两个数的和。在MATLAB中,我们可以使用以下代码来定义这个函数:

```matlab

function sum = add(a, b)

sum = a + b;

end

```

在这个函数中,我们定义了两个输入参数a和b,以及一个输出参数sum。函数体中,我们将a和b相加,并将结果赋值给sum。当我们调用这个函数时,它将返回两个数的和。例如,我们可以使用以下代码来调用这个函数:

```matlab

x = 1;

y = 2;

z = add(x, y);

```

在这个例子中,我们定义了两个变量x和y,并将它们的值分别赋为1和2。然后,我们调用了add函数,并将x和y作为输入参数传递给它。add函数执行完毕后,它将返回x和y的和,并将结果赋值给变量z。因此,变量z的值为3。

2. 向量型返回值

向量型返回值是指函数返回一个向量。例如,我们可以定义一个函数,生成一个长度为n的等差数列。这个函数的返回值就是一个长度为n的向量。在MATLAB中,我们可以使用以下代码来定义这个函数:

```matlab

function seq = linspace(a, b, n)

函数参数返回值总结

函数参数返回值总结

函数的参数、返回值总结

(一)参数

◆函数分:

有参函数:函数名(实参列表)

无参函数:函数名()

◆有参函数调用语句中的实参应与被调函数中的形参在个数、类型、顺序上一致。

◆参数传递时,实参向形参一一对应进行单向的值传递。值:可是数值(变量或数

组元素)或数值的地址值(指针或数组名)。

(二)返回值

函数的返回值即为函数调用后的结果,可有如下返回结果的方法:

(1)通过return语句返回一个值;

(2)利用地址做参数返回一个或多个值;

(3)利用全局变量返回一个或多个值。

(三)例

1、170页实验内容(1):打印由正三角和倒三角组成的图形。

有一个参数,无返回值。实参向形参传递一个数值。

#include <stdio.h>

/* 有一个参数,无返回值的函数,打印正三角 */

void f1(int n) /* 形参只能是变量,用来接收实参传来的数值 */

{ int i,j,k;

for(k=1;k<=n;k++)

{for(i=1;i<=10-k;i++)

printf(" ");

for(j=1;j<=k;j++)

printf(" *");

printf("\n");}

}

/* 有一个参数,无返回值的函数,打印倒三角*/

void f2(int n)

{int i,j,k;

for(k=n;k>=1;k--)

{for(i=1;i<=10-k;i++)

printf(" ");

for(j=1;j<=k;j++)

printf(" *"); /*双引号内应为“空格加半角星号”*/

printf("\n");}

函数的返回值

函数的返回值
c=max(a,b);
return语句的后面可以有括 号,
printf(“Max is %d”,c);
也可以没有。
如:
}
return z ; return(z); (3 )return语句的后面可以是变 量 ,也可以是表达式。
int max(int x,int y) { int z;
z=x>y ? x : y; return(z); }
沟通无限—函数间的数据传递
(4)return语句返回值的类型应与该函数的类型一 致,若不一致 ,以函数定义的类型为准。
(5)若函数中没有return语句,则该函数被调用后也会带回不确定 的值。 凡不需要返回值的函数,一般均定义为“void”类型。 (6) 一个函数可以有一个以上的return语句,执行到哪个return语 句, 哪个return语句起作用。
沟通无限—函数间的数据传递
函数的返回值
主调函数调用被调函数得到一个确定的值,这就是函数的返回值。
int main( )
(1)函数的返回值是通过return { int a, b, c ;
语句获得的。当不需返回函数Βιβλιοθήκη Baidu时 ,可省去return语句。 (2)
int max(int,int); scanf(“%d,%d”, &a, &b);

c++函数的返回值

c++函数的返回值

c++函数的返回值

C++函数的返回值指的是函数执行后返回给调用者的值。函数的返回值可以是任何C++数据类型,比如整型、浮点型、字符型、结构体、类等等。

定义函数返回值类型时,需要在函数名前面声明返回类型。例如,如果函数需要返回整型数据,可以这样定义:

```cpp

int sum(int a, int b) {

return a + b;

}

```

在这个例子中,函数名为sum,返回类型为int,接受两个整型参数a和b。函数执行后,返回a和b的和。

函数的返回值可以用于赋值给变量,比如:

```cpp

int x = sum(3, 5);

```

在这个例子中,将3和5作为参数传递给sum函数,函数执行后返回结果8,将其赋值给变量x。

另外需要注意的是,函数的返回值可以没有,这时候函数的返回类型应该为void,例如:

```cpp

void print_hello() {

std::cout << "Hello, World!" << std::endl;

}

```

在这个例子中,函数名为print_hello,返回类型为void,函数执行后不会返回任何数据。

除了基本数据类型的返回值,C++函数还可以返回指针类型、数组类型和引用类型等。例如,可以定义一个返回指向int类型的指针的函数:

```cpp

int* create_array(int size) {

int* arr = new int[size];

for (int i = 0; i < size; i++) {

arr[i] = i;

查找返回值函数

查找返回值函数

查找返回值函数

查找返回值函数是编程中常用的一项技术。在编写代码时,经常需要使用函数来进行各种操作,而函数的返回值则是函数执行完毕后返回给调用者的结果。因此,查找返回值函数的方法对于编程人员来说是非常重要的。

要查找返回值函数,可以使用各种不同的工具和方法。首先,可以使用现有的开发环境或集成开发环境(IDE)来搜索代码库中的函数。一些常见的IDE包括Visual Studio、Eclipse和NetBeans。这些IDE通常都具有强大的搜索功能,可以快速地查找特定的函数。

此外,还可以使用命令行工具或代码编辑器来查找返回值函数。例如,可以使用grep命令在Linux或Unix系统中搜索特定的函数。在Windows系统中,可以使用PowerShell或其他命令行工具来进行类似的操作。

除了使用工具和IDE外,还可以阅读相关的文档和参考资料来查找返回值函数。很多编程语言都有详细的文档和参考资料,可以帮助开发人员了解特定函数的使

用方法和返回值类型。此外,还可以参考在线论坛、博客和社区,了解其他开发人员的经验和建议。

总之,查找返回值函数是编程中必不可少的一项技术。通过使用各种工具和方法,开发人员可以快速地找到特定的函数,并了解其返回值类型和使用方法。这

有助于提高代码的可读性和可维护性,从而更好地完成编程任务。

函数的返回值(补充)

函数的返回值(补充)

函数的返回值

函数的返回值

函数可以返回0个或多个结果

-return保留字用来传递返回值

-函数可以有返回值,也可以没有,可以有return,也可以没有-return可以传递0个返回值,也可以传递任意多个返回值,

-元组类型返回

(2, 'knock~') return 可以实现从函数中返回一个值并跳出函数的功能,可以放在

函数中任何位置,当执行到第一个return 语句时,程序返回到调用

程序。

例如:编写函数,判断所输入的任意一个大于等于2的整数是否

为素数,是输出为True ,否则输出为False 。然后编写测试代码,判

断并输出2——100中的素数。

多条return 语句

多条return语句(2, 'knock~')

return返回多个值

例如:编写一个函数,返回一组随机小数列表。先编写一个函数,能够生成n个随机小数,然后测试代码,生成并输出5个随机

(2, 'knock~')

小数。

Python中return可以有0个和多个,也可以只用return什么都不写,如下面的例子。调用时应该输出什么呢?

return后面的print打印输出并没有执行!使用return只是

结束了函数!

return后面的print打印输出并没有执行!使用return只是结束了函数!

既然函数funcTest()没有返回值,如果输出上面funcTest()会出现什么结果呢?

所以,可以说,所有的函数都有返回值。如果你没告诉他们该返回什么,将返回None

def fact(n,m=1):

s=1

for i in range(1,n+1):

js调用函数的返回值

js调用函数的返回值

js调用函数的返回值

js调用函数的返回值是指函数执行后返回的结果。在js中,函数可以返回任何类型的值,包括数字、字符串、布尔值、数组、对象等等。

要调用函数的返回值,可以使用函数名后面加上一对小括号,例如:

function add(a, b) {

return a + b;

}

var result = add(1, 2); // 调用add函数并获取返回值

console.log(result); // 输出3

在上面的例子中,add函数接收两个参数a和b,将它们相加后返回结果。调用add函数时传入参数1和2,保存返回值到变量result中,并输出结果。

需要注意的是,如果函数没有返回值,调用时会返回undefined。如果需要在函数内部使用return语句返回多个值,可以将它们封装在一个对象或数组中一起返回。

总之,在使用函数时,理解函数的返回值对后续操作非常重要。

- 1 -

布尔型函数返回值

布尔型函数返回值

布尔型函数返回值

布尔型函数是指返回布尔值(true或false)的函数。布尔型函数通常用于判断条件或进行逻辑判断,并根据条件的真假返回相应的布尔值。

布尔型函数的返回值可以有以下几种情况:

1. true:当条件满足时,函数返回true。这表示条件为真。

2. false:当条件不满足时,函数返回false。这表示条件为

假。

3. undefined:当函数无法确定条件的真假时,可能会返回

undefined。这通常是因为函数中没有明确定义返回值的情况

布尔型函数的具体返回值取决于函数内部的逻辑和判断条件。例如,一个判断一个数字是否大于10的布尔型函数可以返回true或false ,具体取决于数字是否满足条件。另一个判断字符串是否为空的布尔型函数可以返回true或false,具体取决于字符串是否为空。

需要注意的是,在JavaScript中,某些非布尔型的值也可以被当作布尔值使用。例如,数字0、空字符串、null、undefined、NaN等被视为假值(false),而其他值被视为真值(true)。因此,在某些情况下,布尔型函数可能返回这些假值或真值来表示条件的真假。

arm汇编函数返回

arm汇编函数返回

arm汇编函数返回

ARM汇编语言是一种底层的程序设计语言,用于编写嵌入式系统和操作系统等应用程序。在ARM汇编语言中,函数的返回值是非常重要的,它可以将计算的结果返回给调用方。本文将围绕ARM汇编函数的返回值展开讨论,探讨其相关特点和使用方式。

一、ARM汇编函数的返回方式

在ARM汇编语言中,函数的返回值通常通过寄存器来传递。ARM体系结构中,常用的返回寄存器是R0,它用于存储函数的返回值。在函数执行完毕后,将结果存储在R0寄存器中,然后通过函数调用指令返回到调用方。

二、ARM汇编函数的返回值类型

ARM汇编语言支持多种数据类型的返回值,包括整型、浮点型和结构体等。对于整型和浮点型的返回值,可以直接通过R0寄存器返回;对于结构体等复杂类型的返回值,通常需要通过传递指针的方式返回。

三、整型返回值的示例

下面以一个简单的示例来说明整型返回值的使用方式:

```

.global main

.text

main:

push {lr} ;保存返回地址

bl func ;调用func函数

mov r1, r0 ;将返回值保存到r1寄存器

pop {pc} ;恢复返回地址并返回

func:

mov r0, #123 ;将123存储到r0寄存器,作为返回值

bx lr ;返回到调用方

```

在上述示例中,我们定义了一个名为`func`的函数,它将常数123作为返回值。在`main`函数中,我们通过`bl`指令调用了`func`函数,并将返回值保存在r1寄存器中。

四、浮点型返回值的示例

对于浮点型的返回值,ARM汇编语言使用特殊的浮点寄存器来传递。下面以一个简单的示例来说明浮点型返回值的使用方式:

函数中的返回值

函数中的返回值

函数中的返回值

摘要:

一、函数返回值的概念

二、函数返回值的类型

三、函数返回值的用途

四、函数返回值的注意事项

五、总结

正文:

【一、函数返回值的概念】

在编程中,函数是实现特定功能的一段代码。当函数执行完毕后,它可能会返回一个值,这个值被称为函数的返回值。返回值可以用来表示函数执行的结果,或者作为其他函数的输入参数。

【二、函数返回值的类型】

函数返回值的类型取决于编程语言和函数的具体实现。一般来说,函数返回值可以是以下几种类型:

1.整数(int)

2.浮点数(float)

3.字符串(string)

4.布尔值(bool)

5.空值(null)

6.对象(object)

7.数组(array)

【三、函数返回值的用途】

函数返回值可以用于以下场景:

1.输出函数执行结果:某些函数的目的是计算出一个值,并将这个值返回给调用者。例如,计算两个数的和、求一个字符串的长度等。

2.作为其他函数的输入参数:当一个函数需要使用其他函数的结果作为输入时,可以通过返回值来实现。例如,一个函数需要对一个数组进行排序,它可以通过调用另一个排序函数并接收其返回值来实现。

3.控制程序流程:函数返回值还可以用于控制程序的执行流程。例如,通过判断一个函数的返回值,可以决定是否继续执行某些代码块。

【四、函数返回值的注意事项】

1.返回值应具有明确的意义:函数的返回值应能够清晰地表达函数执行的结果,以便于调用者理解和处理。

2.避免返回无关的值:函数应仅返回与函数功能相关的值,避免返回无关的值,以降低程序的复杂性和提高代码的可读性。

3.遵循编程语言的返回值规范:不同的编程语言可能有不同的返回值规范,函数应遵循相应的规范来提高代码的可移植性。

python基础之函数的返回值

python基础之函数的返回值

python基础之函数的返回值函数的返回值

返回结果要怎么做,多个结果⼜要怎么做

# 函数返回值

# 概念:函数执⾏完以后会返回⼀个对象,如果在函数内部有return 就可以返回实际值,

# 否则将会返回空 None

# 类型:可以返回任意类型,返回值类型应该取决于return后⾯的类型

# ⽤途:给调⽤⽅返回数据

# 在⼀个函数体内可以出现多个return关键字,但是肯定只能返回⼀个return关键字

# 如果在⼀个函数体内,执⾏了return,就意味着函数就推出了,return后⾯的代码语句将不会执⾏

def Sum(a,b):

sum=a+b

pass

Sum(10,30)

def Sum(a,b):

sum=a+b

return sum #将返回给调⽤者

pass

print(Sum(10,30)) #函数的返回值返回到调⽤的地⽅

def Sum(a,b):

sum=a+b

return sum #将返回给调⽤者

pass

rs=Sum(10,30) #将返回值赋给其他的变量print(rs) #函数的返回值返回到调⽤的地⽅

def calComputer(num):

result=0

i=1

while i<=num:

result+=i

i+=1

pass

return result

# 调⽤函数

value=calComputer(10)

print(type(value))

print(value)

def calComputer(num):

li=[]

result=0

i=1

while i<=num:

result+=i

i+=1

function的返回值

function的返回值

function的返回值

在编程中,function(函数)是一段可重复使用的代码,用于执行特定的任务或计算。函数可以接收输入(参数),执行操作,并生成输出,这个生成的输出就是函数的返回值。

函数的返回值是函数执行完毕后产生的结果,这个结果可以是单一的值、对象、数组等,具体取决于函数的设计和用途。在许多编程语言中,使用关键字如return 来明确指定函数的返回值。

以下是一些示例,说明了函数返回值的概念:

一、JavaScript 中的函数:

function add(a, b) {return a + b;}

var result = add(3, 5);

这里result 的值是8,因为add 函数返回a + b 的结果。

二、Python 中的函数:

def multiply(x, y):

return x*y

result = multiply(4, 6)

这里result 的值是24,因为multiply 函数返回x * y的结果。

三、C++ 中的函数:

int square(int x) {return x * x;}

int result = square(3);

这里result 的值是9,因为square 函数返回x * x的结果。

函数的返回值是执行完函数后得到的结果,开发者可以利用这个结果进行后续的操作或者将其存储在变量中供以后使用。函数的返回值允许将计算逻辑封装在函数内部,提高代码的模块化和可读性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数返回值

int Count()

{

int i,j;

i=100;

j=200;

return i+j;

}

测试函数:

void Test()

{

int k=Count();

printf("\n k[%d]\n");

}

C/C++的函数返回值一般是放在寄存器eax里的,而不是在栈里。

你的这一句int k = Count()的汇编语句就是这样:

mov [esp - 4], eax //eax里是300,esp - 4是局部变量k的位置

你可以在vc里做个实验:

int add(int a, int b)

{

__asm {

mov eax,a // 把参数1存入eax

add eax,b // eax += 参数2, 结果在eax里

}

}

int main()

{

printf("%d\n", add(3, 4));

return 0;

}

楼主需要了解下寄存器这一概念,我就不把C/C++函数的汇编代码给发出来了。

还有在汇编层面来看,函数的返回值根本就没有定论,函数可以通过多种方式返回。保存返回值在eax里只是C/C++的一个约定而已。

返回值可以放在栈里,但你在C的语言层面上可能做不到,其实随着函数的结束,mov esp, ebp这条指令过后,函数内部的局部变量就报废了。如果你之后没改变过栈的内容,你可以用栈来存返回值,但比起用寄存器来存储,存储和读取要慢的多。

自己突发奇想在vc下试了下用栈“返回”值,写了段代码:

#include

void __declspec(naked) __stdcall return_a_value()

{

int local;

local = 1990; // 栈空间

__asm ret

}

int main()

{

int local = 1;

return_a_value(); // 用栈返回值

printf("%d\n", local);

return 0;

}

汇编看c之一,简单函数调用

简单的函数调用,通过简单的函数调用反汇编可以清楚了解如下

1.栈到底是什么,如何操纵栈的?

2.参数和临时变量是以什么形式在哪存放?

3.如何传递返回值?

举例:

#include

int add(int a,int b)

{

int c=0;

c=a+b;

return c;

}

int main(void)

{

int x=0;

int y=3;

int z=4;

x=add(y,z);

return 0;

}

这是一个简单的通过调用函数计算两数之和的程序

VC6.0生成的汇编代码如下:

add函数

{

0040D750 push ebp

//把main函数的ebp压栈,ebp=1000,esp=896

0040D751 mov ebp,esp

//得到“新”栈基址,这里的新的意思是每个函数访问属于自己的一块栈区域,其实是相邻的内存区域,或者说栈只有一个。ebp=896,esp=896

0040D753 sub esp,44h

//ebp=896,esp=828

0040D756 push ebx

0040D757 push esi

0040D758 push edi

//ebp=896,esp=816

0040D759 lea edi,[ebp-44h]

0040D75C mov ecx,11h

0040D761 mov eax,0CCCCCCCCh

0040D766 rep stos dword ptr [edi]

//初始化内部变量区

5: int c=0;

0040D768 mov dword ptr [ebp-4],0

//c放入“新”栈基址

6: c=a+b;

0040D76F mov eax,dword ptr [ebp+8]

0040D772 add eax,dword ptr [ebp+0Ch]

//因为“新”栈基地址就是“旧”栈顶地址,所以通过ebp访问传过来的参数,ebp+8到ebp+c是因为ebp上方的8字节用于存储调用函数的调用地址和“旧”堆栈基地址了。

0040D775 mov dword ptr [ebp-4],eax

//运算结果放入c中

7: return c;

0040D778 mov eax,dword ptr [ebp-4]

//用寄存器eax返回结果

8: }

0040D77B pop edi

0040D77C pop esi

0040D77D pop ebx

//恢复寄存器的值,ebp=896,esp=828

0040D77E mov esp,ebp

//恢复“旧”栈顶地址,ebp=896,esp=896,此函数堆栈被释放!

0040D780 pop ebp

相关文档
最新文档