0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

函数参数传递的原理

PoisonApple 来源:网络整理 2018-03-02 11:41 次阅读

参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,方法有按值传递参数,按地址传递参数和按数组传递参数。

形参:指出现在Sub 和Function过程形参表中的变量名、数组名,该过程在被调用前,没有为它们分配内存,其作用是说明自变量的类型和形态以及在过程中的作用。形参可以是除定长字符串变量之外的合法变量名,也可以带括号的数组名。

实参:实参就是在调用Sub 和Function过程时,从主调过程传递给被调用过程的参数值。实参可以是变量名、数组名、常数或表达式。在过程调用传递参数时,形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但它们的数据类型、参数个数及位置必须一一对应。

函数参数传递的原理

等号、函数名称、括弧和参数,是函数的四个组成部分。

函数“=SUM(1,2,3)”,1、2和3就是SUM函数的参数,没有参数1、2、3,函数SUM则无从求值。

函数“=VLOOKUP(2,A:C,3,)”,没有参数2、A:C和3,函数VLOOKUP如何在A:C区域查找A列中是2那一行第3列的数值?

当然,也有不需要参数的函数,如“=PI()”、“=NOW()”、“TODAY()”等。

函数参数传递的原理

C语言中参数的传递方式一般存在两种方式:一种是通过栈的形式传递,另一种是通过寄存器的方式传递的。这次,我们只是详细描述一下第一种参数传递方式,另外一种方式在这里不做详细介绍。

首先,我们看一下,下面一个简单的调用例程:

int Add (int a, int b, int c)

{

return a+b+c;

}

void main()

{

int x =0 , y = 1, z = 2;

int result = 0;

result = Add(x, y, z);

printf(“Result for x+y+z %d”, result);

}

借助以上例程,我们具体看一下,参数是如何传递的。首先,我们了解一个知识点,就是“()”操作符在C语言中有很多含义,比如说,结合符、函数调用符等。那么在result = Add(x,y,z)语句中当然为函数调用符,因此在编译阶段,遇到函数调用符后的执行序为,从最后一个参数开始压栈,压栈顺序为z-》y-》x, 直到将全部的参数压到调用栈中,然后call到Add对应的函数地址开始执行。那么压栈执行完成后,栈空间,从上到下依次的顺序为x-》y-》z(因为栈的生长方向为向上,即地址低的地方,因此,x在地址最低的地方,即栈顶)。因此,在被调用函数中参数的读取和操作也都是发生在栈中的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4273

    浏览量

    62290
收藏 人收藏

    评论

    相关推荐

    二维数组作为函数参数传递在实际中的应用

    由于表达式中的数组名data可以被解释为指针,即data的类型为指向int [2]的指针类型int (*)[2],因此必须将pData声明为与之匹配的类型,data才能作为实参传递
    的头像 发表于 12-20 07:19 6527次阅读

    #硬声创作季 计算机基础:函数参数传递

    计算机基础
    Mr_haohao
    发布于 :2022年11月03日 08:40:43

    [3.3.1]--函数参数传递1

    PHPPHP开发
    jf_75936199
    发布于 :2023年03月13日 10:23:51

    [3.3.2]--函数参数传递2

    PHPPHP开发
    jf_75936199
    发布于 :2023年03月13日 10:24:32

    函数参数传递(1)#程序设计基础

    程序设计
    学习硬声知识
    发布于 :2023年05月30日 13:00:32

    函数参数传递(2)#程序设计基础

    程序设计
    学习硬声知识
    发布于 :2023年05月30日 13:01:16

    函数参数传递#Python

    程序函数python
    未来加油dz
    发布于 :2023年08月26日 23:41:38

     函数参数传递(1)#Python

    程序语言代码python
    未来加油dz
    发布于 :2023年08月30日 19:12:53

     函数参数传递(2)#Python

    程序语言代码python
    未来加油dz
    发布于 :2023年08月30日 19:13:56

    keil 变量xdata函数参数传递

    char a).当aa作为参数传到函数bb,用a来接收的时候,区域进行了改变,区域不同,是否会出现问题?函数bb里面,用的也是unsigned char xdata b来接收a的值。从存储空间里面来看,从
    发表于 03-03 10:34

    怎么将函数参数传递给内联ASM

    这是怎么做到的?常规的asm指令编译文件,但我从来没有实现对函数外部声明的函数参数或变量的访问。我已经研究了一段时间,但我不是很清楚。什么是正确的合成函数?当做
    发表于 09-29 09:22

    为什么调用C的函数参数传递的往往是传值?

    ; swap(x,y); printf("%d,%d\n",x,y);}用这个swap函数,并不能将x,y的值对换,因为函数是值传递,请大家帮忙怎么理解这个程序,打不开思路了。
    发表于 11-08 04:35

    函数参数传递出现错误

    定义一个函数 void test(IDINT8U TpmNum, IDINT8U ChVal, IDINT16U ChalNum);并在程序中进行调用。结果通过设置断点看到最后一个参数的值总是传递
    发表于 04-16 21:51

    函数参数传递总是出错怎么办

    函数参数传递总是出错,怎么办啊??可能会是什么原因?
    发表于 07-19 08:00

    单片机的本质函数参数传递详细资料说明

    本文档的主要内容详细介绍的是单片机的本质函数参数传递详细资料说明。
    发表于 07-16 17:39 1次下载
    单片机的本质<b class='flag-5'>函数</b><b class='flag-5'>参数</b><b class='flag-5'>传递</b>详细资料说明