c语言参数传递过程,C语言函数参数传递过程

下面通过一个简单的c函数调用分析参数的传递及返回过程。

示例代码

#include

int plus(int x,int y){

return x+y;

}

int main(){

__asm{

mov eax,eax

}

//调用函数

plus(1,2);

return 0;

}

通过在VC6中观察反汇编代码,如下

15: //调用函数

16: plus(1,2);

0041065A push 2

0041065C push 1

0041065E call @ILT+5(plus) (0040100a)

00410663 add esp,8

4: int plus(int x,int y){

00401010 push ebp

00401011 mov ebp,esp

00401013 sub esp,40h

00401016 push ebx

00401017 push esi

00401018 push edi

00401019 lea edi,[ebp-40h]

0040101C mov ecx,10h

00401021 mov eax,0CCCCCCCCh

00401026 rep stos dword ptr [edi]

5:

6: return x+y;

00401028 mov eax,dword ptr [ebp+8]

0040102B add eax,dword ptr [ebp+0Ch]

7: }

0040102E pop edi

0040102F pop esi

00401030 pop ebx

00401031 mov esp,ebp

00401033 pop ebp

00401034 ret

通过逐行分析堆栈变化画出相应堆栈图变化可以清楚的了解函数的调用过程

d5c62f31fd1829b12cb257b62bc38e29.png

c1cd2f4c07c6834ee66a9a185e8b62f1.png

036f19967de40a0147547f99847a1151.png

通过分析可知:

1)c语言函数调用参数通过堆栈进行传递,从左到右压入堆栈

2)返回值保存到了eax中(本例),最终保持了堆栈平衡

3)堆栈中的数据没有清除,变成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在编程中,"绝对路径"通常指的是以根目录为起点的文件路径,这种路径不受当前工作目录的影响。 在向命令行程序或脚本传递参数时,有时需要将字符串中的特殊字符(如空格)转义,以便正确地传递参数。转义意味着将字符的特殊含义(如空格的分割符)替换为其他字符,以便正确识别该字符。 例如,在 Unix 系统中,使用反斜杠 (\) 对字符进行转义。因此,如果要传递一个包含空格的字符串,则可以使用反斜杠对空格进行转义,例如: ``` $ my_command "hello world" ``` 变为 ``` $ my_command "hello\ world" ``` 这样,命令行程序就可以正确识别该字符串中的空格,并将其作为一个整体处理。 ### 回答2: 绝对路径传递参数是指在给定路径时,直接指定完整路径来传递参数。在计算机编程中,路径是用来定位文件或目录的字符串。绝对路径指的是从文件系统的根目录开始的完整路径,可以精确地定位到目标文件或目录。 在绝对路径中传递参数时,需要注意转义字符的使用。转义字符是一种特殊的字符编码方式,用于表示一些不可打印的字符或具有特殊含义的字符。在绝对路径中,有些字符具有特殊含义,需要使用转义字符来转义,以确保参数传递的正确性。 常见的需要转义的字符包括斜杠(/)、反斜杠(\)、冒号(:)、空格等。当这些字符作为参数的一部分而不是作为路径分隔符时,需要使用转义字符来表示。 例如,如果我们需要在绝对路径中传递包含空格的文件名作为参数,可以使用双引号将文件名括起来,并在空格前添加转义字符。示例路径为:/Users/username/Documents/my\ file.txt。其中的\表示空格。 在编程语言中,具体的转义字符有所不同。在C语言中,常用的转义字符包括“\t”表示制表符,"\n"表示换行符,"\r"表示回车符等。在Python语言中,转义字符是以反斜杠“\”开头的字符,如“\’”表示单引号,“\”表示反斜杠本身,等等。 通过正确地使用转义字符,我们可以在绝对路径中传递参数,并保证参数的准确性。 ### 回答3: 绝对路径传递参数转义是指在程序编程中,通过绝对路径传递参数时,需要对特殊字符进行转义处理,以确保参数能够正确传递并被程序正确解析。 在绝对路径中,有一些特殊字符具有特殊的含义,例如斜杠(/)、问号(?)和等号(=)等。如果这些特殊字符本身需要以字面的方式传递给程序,就需要对其进行转义。 常见的转义字符有: - 反斜杠(\):用来转义特殊字符。例如,如果希望传递的参数中包含斜杠字符,可以使用反斜杠对其进行转义,即将斜杠字符写作\/。 - 百分号(%):用来表示十六进制转义。例如,希望传递参数中包含问号字符,可以将其写作%3F。 - 加号(+):用来表示空格。在传递参数时,空格字符往往会被解析为参数分隔符,因此如果需要在参数中传递空格,可以将其写作+。 通过对特殊字符进行转义,可以确保参数能够正确传递给程序,并被正确解析。这样可以避免由于特殊字符的含义冲突而导致的传参错误或解析错误。 总之,绝对路径传递参数转义是为了保证参数的传递和解析的准确性,通过对特殊字符进行转义处理,确保这些字符能够以字面的形式传递给程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值