从汇编语言进一步了解C++三种函数参数传递方式

前言:

本文为另一篇博文C++函数参数传递的一大利器——引用(左值)中对函数参数传递方式的进一步探讨,部分内容涉及汇编语言,但不影响理解。


—————————————————————————————————————————————————————————————————————————————

编译器对函数调用的实现过程:

首先我们要知道,计算机对数据的处理是不断寻址、读写数据的过程。上升到程序层面,一个个函数在汇编语言中就是一段段汇编指令,这些汇编指令让计算机通过寄存器在内存中访问指定内存块地址并从中读写数据。除全局变量和其它一些形式定义的变量外,函数中的变量都存在栈内存中,程序对变量的修改、传递等一系列操作都是寄存器通过将内容或地址进栈、出栈来实现的。

下面看代码:

C++源代码:

#include <iostream>

using namespace std;

void swap1(int *const a, int *const b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

void swap2(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

void swap3(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

void swap4(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main()
{
    int x = 3;
    int y = 5;
    int *p1 = &x, *p2 = &y;
    cout << "初始值:" << "x = " << x << ",y = " << y << endl;
    swap1(p1,p2);
    cout << "执行swap1后:" << "x = " << x << ",y = " << y << endl;
    swap2(x,y);
    cout << "执行swap2后:" << "x = " << x << ",y = " << y << endl;
    swap3(x, y);
    cout << "执行swap3后:" << "x = " << x << ",y = " << y << endl;
    swap4(p1, p2);
    cout << "执行swap4后:" << "x = " << x << ",y = " << y << endl;
}


编译、执行上述程序后,结果显而易见:除了swap3函数以外,其余函数都能成功交换xy的值。


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值