c语言中交换函数用指针吗 c语言中的交换函数
C语言 写一个函数交换两个数的值,为什么一定要用指针?
运用代码解释指针运用的理解如下:
成都创新互联公司是一家专业提供迁西企业网站建设,专注与成都网站制作、做网站、H5高端网站建设、小程序制作等业务。10年已为迁西众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
#includeiostream
using namespace std;
int fun1 (int a,int b)
{
int c;
c=a;a=b;b=c;
cout"a1:"a";b1:"bendl;
}
int fun2 (int *a,int *b)
{
int *c;
c=a;a=b;b=c;
cout"a2:"*a";b2:"*bendl;
}
int fun3(int *a,int *b)
{
int *c;
c=*a;*a=*b;*b=c;
cout"a3:"*a";b3:"*bendl;
}
int fun4 (int *a,int *b)
{
int c;
c=*a;*a=*b;*b=c;
cout"a4:"*a";b4:"*bendl;
}
int fun5 (int a,int b)
{
int c;
c=a;a=b;b=c;
cout"a5:"a";b5:"bendl;
}
int main()
{
int aa=1,bb=2;
fun1(aa,bb);
cout"aa1:"aa";bb1:"bbendl;
fun2(aa,bb);
cout"aa2:"aa";bb2:"bbendl;
fun3(aa,bb);
cout"aa3:"aa";bb3:"bbendl;
fun4(aa,bb);
cout"aa4:"aa";bb4:"bbendl;
aa=1,bb=2;
fun5(aa,bb);
cout"aa5:"aa";bb5:"bbendl;
return 0;
}
输出结果为:
a1:2;b1:1
aa1:1;bb1:2
a2:2;b2:1
aa2:1;bb2:2
aa3:1;bb3:2
a4:2;b4:1
aa4:2;bb4:1
a5:2;b5:1
aa5:2;bb5:1
main中调用fun1()时,将实参a,b的值传递给了交换函数,如果此时在swap1中打印,可以看到结果是正确的,但是该过程其实是将aa和bb分别复制了一份给了函数,执行完fun1()之后,aa和bb的值没有任何变化。
fun2(),看似的确使用了指针,但还是失败,因为这里是将aa和bb的地址给交换了,而并没有交换aa和bb的值。在这里由于未给c赋值,c中并没有确定的值,c中的值是不可预见的。此时c可能指向一个未知的存储单元。
而严重的情况是,该单元的数据可能是有用的,因此fun2()不但没有实现两个数的交换,反而给系统的稳定性带来威胁。
fun3(),将int赋值给int *,编译错误。
fun4()是正确的。为了在函数中改变了的变量能被其它函数调用,正确的办法是用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化。
函数调用结束后,哲别变量值的变化依然保留下来,这样就实现了通过函数调用是变量的值发生变化,在其它函数中可以使用这些改变了的值的目的。
fun5()也是正确的,这是引用的重要应用之一。对于引用的操作实际上是作用在引用所因的对象上。
扩展资料
在函数中的参数,并不是调用者的变量,而是临时申请的变量a和b存放main函数中变量a和b的值,并在函数中用来计算,在fun中给a和b赋值都是在操作这两个临时申请的变量,函数返回后,这两个变量被舍弃,函数调用也没有将这两个临时变量的值返回给main函数中调用使用的参数功能。
所以,在函数中要操作调用者申请的变量,需要给出它们的指针,函数中用指针来找到这些变量的位置和内容。
关于C语言交换两个数(有关指针)
在C语言中,通过函数参数传递,进行两个数的交换,必须采用传递指针的方式,同时,在函数中,一定要对两个指针中的数据内容进行交换才能达到交换实参地址中数据的目的。
如:
//正确的交换函数
void swap1(int *p1,int *p2)
{
int p;
p=*p1; //通过*引用地址中的数据,进行交换
*p1=*p2;
*p2=p;
}
//错误的交换函数
void swap2(int *p1,int *p2)
{
int *p;
p=p1; //这里进行改变的是形参的值,而形参只是实参的一个副本,形参本身的变化,是不能改变实参的值的!!
p1=p2;
p2=p;
}
PS:要正确认识C语言中的实参与形参,形参在使用中只是实参的副本,若形参是指针,我们可以通过形参改变实参地址中的内容,但无法改变实参本身的值!
C语言调用函数互换ab,为什么要用指针。不用指针能行吗?注意,是调用函数。
这是 C 语言 本身 特性 规定了 的。你只要记住 这点: 形参 必须用指针,这样才能把 通过 函数加工 后的 数值 带回来。通过函数 互换后 的a,b,才能被带回。
至于“为什么”,可以不去追究,它的理由 无非 是什么 地址啦,值啦之类,时间长了,自己会记混淆。
其它语言,例如 fortran 语言,不管形参是什么花样,都能带回。
c语言中两个数交换值,为什么要用指针
假设pa原本指向内存单元a,
pb原本指向内存单元b,
自然而然,交换之后pa指向内存单元b,
pb指向内存单元a,
那么pa对应的值就变成了b原来的值,
pb对应的值也就变成了a原来的值,
用函数交换两个数的值,必须要指针吗
不用指针了可以啊,例如交换a和b的值(前提不溢出)
a +=b;
b=a-b;
a=a-b;
如果你问为什么swap(int a,int b)无法交换,这是因为实参是形参的拷贝。想象有一个对手下非常不信任的老板,他的手上的文件是形参,手下的实际操作的文件都是从他手上复印的,因此可以理解成实参。无论手下如何努力修改复印的文件,都不可以改变老板文件内容。如果老板说“把柜子的那个文件改一下”,手下就可以改了。因为他告诉真幰实文件的地址,手下可以修改真幰实文件。指针就是这个地址
C语言中交换两个数为什么一定要用指针和调用函数?
我刚入门的时候也是这样想的,哈哈。
但是随着你学的深入,你会知道指针才是c语言的灵魂。
用函数交换变量,如果不用指针的话,是无法进行的,因为函数只能改变形参,而对于主函数的实参,是没有交换作用的(这里得好好想想,初学可能会糊涂的点就在这)
指针的作用很多的,下面是我上课做的一些笔记,你可以看看。
有什么问题再追问我哦~
指针的重要性
表示一些复杂的数据结构
快速的传递数据,减少内存的耗用
使函数返回一个以上的值
能直接访问硬件
能够方便地处理字符串
是理解面向对象语言中引用的基础
总结:指针是c语言的灵魂
当前名称:c语言中交换函数用指针吗 c语言中的交换函数
URL地址:http://azwzsj.com/article/hpisgo.html