交换主函数变量的值

c语言中实现“交换两个整型变量的值“的函数

函数形参与实参在内存中的处理;

void exchange (int int)

void exchange (int one ,int another){

int temp;

temp=one ;

one=another;

another=temp;

}

int main()

{

int num1;

int num2;

scanf("%d%d",&num1,&num2);

exchange(num1,num2);

printf("num1=%d,num2=%d",num1,num2);

}

对于这个结果是没有实现交换,操作系统内存管理角度的“系统堆栈”决定。对于调用函数时,系统会分配一个数据域的栈用来保存该段程序的数据,上例中,首先分配空间给num1,num2,栈顶指针向上移动8个字节,调用函数时从右向左首先进行对主函数的保护现场,分配4 个字节来保存其指针,然后向栈分配one,another,空间,在执行子函数时相当于改变在栈内申请的one 和another,即仅仅交换了one和another,子函数执行完释放形参指针变量,栈顶指针向下移动8个字节,在去继续执行主函数接下来的程序。所以num1和num2在调用函数里就没有发生改变。

因此,当我们需要改变主函数变量的值时,需要传的是变量的地址,通过指针来进行访问主函数里的变量,从而进行更改。

void realexchange(&num1,&num2)

void realexchange (int *one ,int*another )

{

   int temp;

  temp=*one;

*one=*another;

*another=temp;

}

此时栈顶指针向上偏移8个字节分别保存了num1num2的地址,*one和*another分别两条指针指向num1和num2的单元,然后交换完成,形参指针释放,栈顶指针向下移动8字节,此时num1和num2的值已经改变。

所以当我们需要改变主函数里变量的值时,必须要传变量的地址值。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值