函数参数

来源:互联网 发布:java spring rpc 编辑:程序博客网 时间:2024/06/06 08:28

函数参数在本质上与局部变量相同在栈上分配空间
函数参数的初始值是函数调用时的实参值

函数参数的求值顺序依赖于编译器的实现

程序中的顺序点

程序中存在一定的顺序点
顺序点指的是执行过程中修改变量值得最晚时刻
在程序到达顺序点的时候,之前所做的一切操作必须完成

C语言中的顺序点

每个完整表达式结束时,即分号处
&&,||,?:,以及逗号表达式的每个参数计算之后
函数调用时所有实参求值完成后(进入函数体之前)

参数入栈顺序

调用约定
当函数调用发生时
-参数会传递给被调用的函数
-而返回值会被返回给函数调用者
调用约定描述参数如何传递到栈中以及栈的维护方式
-参数传递顺序
-调用栈清理
调用约定是预定义的可理解为调用协议
调用约定通常用于库调用和库开发的时候
-从右到左依次入栈:__stdcall,__cdecl,__thiscall
-从左到右依次入栈:__pascal,__fastcall

可变参数

C语言中可以定义参数可变的函数
参数可变函数的实现依赖于stdarg.h
-va_list ——参数集合
-va_arg——取具体参数值
-va_start——标识参数访问的开始
-va_end——标识参数访问的结束

可变参数的限制

可变参数必须从头到尾按照顺序逐个访问,无法直接访问中间的参数值
参数列表中至少要存在一个确定的命名参数
可变参数函数无法确定实际存在的参数的数量
可变参数函数无法确定参数的实际类型

原创粉丝点击