有两个整型变量a和b,要求把它们的值互换(使用指针变量)

本文深入探讨了C语言中使用指针进行变量值互换的正确方法,对比了不同函数实现方式的优劣,解释了为何直接使用变量进行值传递无法达到预期效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

//有两个整型变量a和b,要求把它们的值互换

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

}

为什么不能用下面这个代码实现呢??

void Swap(int *a,int *b)
{
    int *temp;
    *temp=*a;//此句有问题
    *a=*b;
    *b=*temp;

}

 

*a就是a,是整型变量。而*temp是指针变量temp所指向的变量。但由于未给temp赋值,因此temp中并无确定的值(它的值是不可预见的),所以temp所指向的单元也是不可预见的。所以,对*temp赋值就是向一个未知的存储单元赋值,而这个未知的存储单元中可能存储着一个有用的数据,这样就有可能破坏系统的正常工作状况。应该将*a的值赋给与*a相同类型的变量,即整型变量。所以在程序中用整型变量temp作为临时变量实现*a和*b的交换。

为什么不能用这个呢?

void Swap(int a,int b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;

}

由于“单向传送”的“值传递”方式,形参值的改变不能使实参的值随之改变。

注:不可能通过调用函数来改变指针实参的值,但是可以改变实参变量所指变量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值