c语言指针变量如何交换位置,C语言的函数中,如何使用指针交换两个数的值,深入理解指针...

最近写代码时遇到一个问题,使用指针变量作为函数参数时,如何交换两个数的值。这个问题看似简单,但却关系到对C语言中指针的理解程度。请看下面三个swap函数

#include "stdafx.h"

void swap1(int a,int b)

{

int t;

t=a;a=b;b=t;

printf("a:%d,b:%d\n",a,b);

}

void swap2(int *a,int *b)

{

int *t;

t=a;a=b;b=t;

}

void swap3(int *a,int *b)

{

int t;

t=*a;*a=*b;*b=t;

}

int main(int argc, char* argv[])

{

int a =5,b=9;

swap1(a,b);

printf("a:%d,b:%d\n",a,b);

swap2(&a,&b);

printf("a:%d,b:%d\n",a,b);

swap3(&a,&b);

printf("a:%d,b:%d\n",a,b);

return 0;

}

第一个swap,定义为void swap1(int a,int b),如果使用java或者其它高级语言,使用该函数没什么问题,甚至是天经地义的,但是C语言里却不行,原因是main中调用swap1()时,将实参a,b的值传递给了交换函数,如果此时在swap1中打印,可以看到a为9,b为5,但是,由于未改变a,b所对应的地址的值,当函数退出时,形参a,b的值已经释放,地址的值未发生改变,因此这里不会返回任何结果,。因此main()中第一行打印的结果仍然未a:5,b:9。

第二个swap,看似的确使用了指针,但输出的也是“a:5,b:9”,为什么呢?由于未给t赋值,t中并没有确定的值,索引t中的值是不可预见的。此时t可能指向一个未知的存储单元,而严重的情况是,该单元的数据可能是有用的,因此swap2()不但没有实现两个数的交换,反而给系统的稳定性带来威胁。本例的作用是将t作为临时指针变量,实现&a和&b的地址交换,而值并未发生变化。

第三个swap是正确的。为了在函数中改变了的变量能被其它函数调用,正确的办法是用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,哲别变量值的变化依然保留下来,这样就实现了通过函数调用是变量的值发生变化,在其它函数中可以使用这些改变了的值的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值