题:要求采取过程调用使得输入的两个数值颠倒顺序。
过程调用参数传递有两种方法,一是按地址传递,二是按值传递,下面通过对两个代码反汇编来比较两种方法的区别。
按地址传递参数 代码
#include<stdio.h>//按地址传递参数
main()
{
int a=15,b=22;
printf("a=%d\tb=%d\n",a,b);
swap(&a,&b);
printf("a=%d\tb=%d\n",a,b);
}
swap(int*x,int*y)
{
int t=*x;
*x=*y;
*y=t;
}
输出
15 22
22 15
按值传递参数 代码
#include<stdio.h>//按值传递参数
main()
{
int a=15,b=22;
printf("a=%d\tb=%d\n",a,b);
swap(a,b);
printf("a=%d\tb=%d\n",a,b);
}
swap(int x,int y)
{
int t=x;
x=y;
y=t;
}
输出
15 22
15 22
两个代码看似没有问题但按参数传递值的调用方法无法实现程序。下面进行查看汇编指令以找出原因。
反汇编操作流程:
分别在main函数和swap函数