c语言函数参数传递方向
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言函数参数传递方向相关的知识,希望对你有一定的参考价值。
参考技术A C语言中函数参数传递的三种方式(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数 参考技术B C语言函数你必须通过它的传递的方向,你才能查出来它的函数的那种呃算出的那个方式,所以通过函数你才能知道它的原理。C语言中参数的传递
普通情况:
调用函数参数的传递,是采取入栈的方式,先上图一张:
Fun是被调用的函数,而为了演示其参数传递的过程,特意多设了几个参数,其传递参数的汇编代码如下:
可以看出,汇编代码中将这9个参数的前5个入栈,后几个直接通过寄存器来传递,而进入函数中出栈代码如下:
可以看出先出栈之后R0,R1,R2,R3(这四个不经过出栈入栈,直接通过寄存器传递),r5,r6,r7,r8,r12装载参数。
在实验得出个很重要的结论:并不是在参数传递过程中所有的参数都需要入栈,一部分参数通过R0-R3传递,甚至参数小于4个的时候就不涉及出栈入栈操作了,个人感觉这是编译器的一种优化。
递归函数:就是一层层的普通操作。第二次入栈操作之前,第一次入栈的数据已经弹出。
传递结构体:元素小于四个,也是通过R0,R1,R2,R3操作,元素多了,也得入栈。
传递浮点数:浮点数存的时候和int类型不一样,传的时候没区别。比如在内存里
这个是把0.5放到R4里
以上是关于c语言函数参数传递方向的主要内容,如果未能解决你的问题,请参考以下文章