pass by value 和pass by reference有什么区别?求救,
最佳回答
最新回答共有2条回答
-
2026-04-07 18:23:44重要的小蝴蝶
回复直接那一个别人写的挺详细的复制给你:1。pass by value i := 10; mov esi,$0000000a // esi的值就是10 (i使用esi寄存器) j := 5; mov edi,$00000005 // esi的值就是5 (j使用edi寄存器) Edit1。Text := IntToStr(Params。SwapByValue(i,j)); mov edx,edi // edx中的值是edi中的值,即同为j的值,注意 不是j的地址!mov eax,esi // esi中的值是esi中的值,即同为i的值,注意 不是i的地址!call SwapByValue // 所以成为 pass-by-value lea edx,[ebp-$04] call IntToStr ////////////////////////////// SwapByValue tmp := i; mov ecx,eax // eax的值为i的值,传给ecx,(tmp使用ecx寄存器,这是编译器的优化),注意 不是i的地址!i := j; mov eax,edx // edx的值为j的值,传给eax,(eax中原值为i,而不是i的地址!) j := tmp; mov edx,ecx // ecx中的值为tmp(i)的值,传给edx,(edx原值为j,而不是j的地址!) // 所以更改后 对函数外面的参数 根本没有影响。Result := i + j; add edx,eax mov eax,edx /////////////////////////////////////////// 2。pass by reference i := 10; mov [ebp-$04],$0000000a // i使用内存 非寄存器 因为对寄存器不能进行取地址 j := 5; mov [ebp-$08],$00000005 // j使用内存 非寄存器 因为对寄存器不能进行取地址 Edit1。Text := IntToStr(Params。SwapByRef(i,j)); // 注意参数压栈方式为 从右到左 lea edx,[ebp-$08] // 注意!edx为j的地址 j使用内存 非寄存器 因为对寄存器不能进行取地址 lea eax,[ebp-$04] // 注意!eax为i的地址 i使用内存 非寄存器 因为对寄存器不能进行取地址 call SwapByRef // here lea edx,[ebp-$0c] call IntToStr //////////////////////////////// SwapByRef tmp := i; mov ecx,[eax] // eax为一个指针,里面的值为变量i的地址,所以需要再寻址一次 通过[eax] i := j; mov ebx,[edx] // edx为一个指针,里面的值为变量j的地址,ebx为j的值 mov [eax],ebx // 把eax这个指针指向的地址的值赋为ebx(j),注意!eax的内容就是函数外i的地址,// 所以相当于直接修改i的内容,所以i被修改!j := tmp; mov [edx],ecx // ecx的值为tmp(i),// 把edx这个指针指向的地址的值赋为ecx(tmp/i),注意!edx的内容就是函数外j的地址,// 所以相当于直接修改j的内容,所以j被修改!Result := i + j; mov eax,[eax] add eax,[edx]前者是传值 ,后者是传址。重要的是区别就是:传值:外面(函数外面)的地址与里面(函数里面)操作的数(内容)(的地址)不是同一个,所以根本没有修改。传地址:外面(函数外面)的地址与里面(函数里面)操作的数(内容)的地址是同一个,所以在函数里面修改的话,影响外面。
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
