当前位置:   article > 正文

c语言用指针返回两个值,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是正确的。为了在函数中改变了的变量能被其它函数调用,正确的办法是用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,哲别变量值的变化依然保留下来,这样就实现了通过函数调用是变量的值发生变化,在其它函数中可以使用这些改变了的值的目的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/程序自动化专家/article/detail/63057
推荐阅读
相关标签
  

闽ICP备14008679号