通过调用函数实现a与b的交换

本文探讨了如何通过C语言的指针来正确实现两个整数a和b的交换。最初的方法在swap函数内部进行了交换,但并未影响到main函数中的a和b。通过调整swap函数,使其接收指向整数的指针,可以实现在函数外部a和b值的有效交换。通过反汇编,我们可以看到这种修改确保了原始变量a和b的值在调用swap后得到正确更新。
摘要由CSDN通过智能技术生成

刚才通过汇编大略理解C了语言的指针

如下题目可以更好的佐证:

 

void swap(int i, int j)

{

    int temp;

    temp = i;

    i = j;

    j = temp;

}

int main(void)

{

    int a = 2, b = 3;

    swap(a, b);

    printf("a = %d, b = %d/n",a b);

    return 0;

}

 

实际上只是交换了swap函数中的i和j,而调用完swap函数而回到main函数后,i和j的生命期已经结束了,不会影响a和b。

(通过反汇编)也就是说,swap函数只是交换了a和b的副本。

 

可做如下修改即可:

 

 

void swap(int *i, int *j)

{

    int temp;

    temp = *i;

    *i = *j;

    *j = temp;

}

int main(void)

{

    int a = 2, b = 3;

    swap(&a, &b);

    printf("a = %d, b = %d/n",a b);

    return 0;

}

 

用变量a和b的首地址传参,用指针变量接受参数,改变的就是a和b地址存放的内容,即a与b的值在swap函数体内实现交换。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值