重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可以用指针,但是C语言在函数调用实参和行参时只能进行单独的“值交换”,所以即使用指针也要改为他的值去进行交换,这样才可以传进实参,进行交换,否则只能在调用函数中有效。
创新互联专注于企业全网营销推广、网站重做改版、盱眙网站定制设计、自适应品牌网站建设、H5高端网站建设、成都做商城网站、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为盱眙等各大城市提供网站开发制作服务。
ee参数int m,int n是传值,m,n交换对a,b没有影响。方法1:定义函数int ee();不传值,直接把a,b定义成全局变量。方法2:定义函数int*ee();不传值,ee函数中用static定义数组[2]代替m,n。返回这个数组。
你写的交换函数中,a=b;一句相当于把a同样指向了b的地址,所以执行完这一句之后,a和b实际上就是一个地址空间了,输出的值当然是一样的了。*a=*b;改变的是内容不是地址。。
然后 你 *x = *y, 会把 b的值赋值给a,此时虽然 tmp仍然指向a,但是a的值此时已经变成b的值了。a本身的值丢失了。
少年,指针不会就尽量不要乱用。指针指向的是地址。不是值。。你只是换了值。但是指针指向的地址没有换,当然输出的还是不变的喽。初学者不推荐使用指针。
1、如一楼所说的那样,C语言的函数如过参数不是指针类型的话那么,那么函数运行的时候是自己再开辟一个内存把您代进去的参数复制过去,然后函数是对开辟的这两个变量进行的操作。因此实际交换的是a,b而不是x,y。
2、输出x和y值之前没有调用fun函数,所以x,y的值一直是初始值。
3、要想交换可以传x,y的地址,这样写 void swp(int *x,int *y){ int tmp;tmp=*x;x*=*y;y*=tmp;} 调用的时候swap(&x,&y);这样传递的是x,y的地址,函数内部修改的其实是x,y的值了。
4、你交换的是函数的局部指针变量p和q,并没有交换p和q指向的目标*p和*q。
5、你看看c语言中的实参和形参的关系。另外看一下指针。第一个有返回值是因为你不管什么时候都对同一个地址进行操作。第二个没有返回值是因为形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
1、ee参数int m,int n是传值,m,n交换对a,b没有影响。方法1:定义函数int ee();不传值,直接把a,b定义成全局变量。方法2:定义函数int*ee();不传值,ee函数中用static定义数组[2]代替m,n。返回这个数组。
2、C语言的函数形式参数是函数的局部变量,你把实参地址值传给形参指针,在函数中交换只在函数中起作用,影响不到主调函数中实参指针的值。
3、因为对于函数swap()来说,传入的两个地址是值传递形式的,在其内部是局部作用域下的两个变量,完成这两个地址“值”的交换,并不能对调用时的实参产生影响。故而交换失败。
4、首先要捋顺一下,先看第一段程序。这段程序的目的就是为了将两个变量的数值进行交换。