c语言函数参数传递方向

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言函数参数传递方向相关的知识,希望对你有一定的参考价值。

参考技术A C语言中函数参数传递的三种方式(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数 参考技术B C语言函数你必须通过它的传递的方向,你才能查出来它的函数的那种呃算出的那个方式,所以通过函数你才能知道它的原理。

C语言中参数的传递

普通情况:

 

调用函数参数的传递,是采取入栈的方式,先上图一张:

 

 

Fun是被调用的函数,而为了演示其参数传递的过程,特意多设了几个参数,其传递参数的汇编代码如下:

 

 

可以看出,汇编代码中将这9个参数的前5个入栈,后几个直接通过寄存器来传递,而进入函数中出栈代码如下:

 

可以看出先出栈之后R0R1R2R3(这四个不经过出栈入栈,直接通过寄存器传递),r5r6r7r8r12装载参数。

 

在实验得出个很重要的结论:并不是在参数传递过程中所有的参数都需要入栈,一部分参数通过R0-R3传递,甚至参数小于4个的时候就不涉及出栈入栈操作了,个人感觉这是编译器的一种优化。

 

 

 

递归函数:就是一层层的普通操作。第二次入栈操作之前,第一次入栈的数据已经弹出。

 

 

传递结构体:元素小于四个,也是通过R0R1R2R3操作,元素多了,也得入栈。

 

 

 

传递浮点数:浮点数存的时候和int类型不一样,传的时候没区别。比如在内存里

这个是把0.5放到R4

 

 

 

 

 





以上是关于c语言函数参数传递方向的主要内容,如果未能解决你的问题,请参考以下文章

C语言中的参数传递方式都有哪些

c语言向函数传递函数作为参数

C语言中,数组名作为函数参数,属于啥传递,为啥?

简答题,c语言中函数传递参数的方式有哪2种,含义是啥

请问这个C语言中有参数的函数是怎么传递值的,调用的时候没有参数啊。

C语言 一个函数中的参数n传递到另一个函数中去