您好、欢迎来到现金彩票网!
当前位置:2019跑狗图高清彩图 > 形参 >

C语言实参与形参的传递问题

发布时间:2019-09-02 23:33 来源:未知 编辑:admin

  我就是不懂 什么情况下(比如上面的swap函数)该传回main函数 什么时候不该传递回main函数

  哎 谁帮帮忙 给我讲下 实参与形参的传递问题 单向传递问题? 我不懂啊展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  如果交换的是地址,也就是形参,那么函数结束后,栈内存自动释放,交换是不会产生效果的;

  如果交换的是值,也就是说不是形参,而是形参&a和&b所指向的值,那么交换可以成功

  主函数中调用了swap,把p传给形参a,把q传给形参b,这时指针a指向了变量i,指针b指向了变量j,在函数swap中,用了以下语句:t=a;a=b;b=t; 这句话是把指针a和b的值互换,就是换成指针a指向j,而指针b指向i,但主函数中的p和q的值并没有互换,所以p仍然指向i,q仍然指向j,所以结果是3 5

  这样是把a和b所指向的变量的值互换了,也就是把i和j的值互换了,于是结果就是5 3

  在值传递中,实参值将值赋给了形参,此时形参只是实参的一份拷贝,形参的任何修改不会影响到实参的值,也就是单向传递,如果采用值传递你或许很容易理解,不在赘述。

  地址传递与值传递有所不同,它不必进行数据的大量复制及转移,只需根据需要改变指针指向。但也存在所谓的“单向”的问题(未必严格)。

  定义p指向0x0000,q指向0x0001,p,q只关心它指向的单元,关心里面存放的数据是否为整型。

  按照你的写法,调用swap 时,因为是地址传递,a指向0x0000,b指向0x0001,再定义辅助指针t,交换以后 a指向0x0001,b指向了0x0000.

  根据 “单向”这一思想,a,b相互交换了指向,这与p ,q无关,p,q的指向依旧不会改变。

  似乎看起来,swap函数不能交换两个数一样,但是地址传递有其特殊性,既然a,b指向0x0000和0x0001,其就有权改变其里面的内容。*a,*b就是相应单元的内容,其内容为整型数,所以可定义一个整型辅助变量t就可将两个内存单元值交换。(区别于值传递中拷贝副本之间的交换)

  由于p,q指向依旧不变,依旧指向0x0000和0x0001, 即便按此原址输出,也会输出交换后的数据。*/

  展开全部这里swap的参数,表面上看是指针,但在函数内不是对指针指向的数据进行操作,而是对指针形参本身进行操作,因此无法起到把3,5改成5,3的效果.

  展开全部首先你要知道函数的指针a,b和main()中的p,q是两个不同的指针变量,只不过在调用swap()时他们存储的内容是一样的,在你的函数swap中只是改变a,b存储的内容,但是没有改变指针中存储的地址中的内容,所以p,q的值不会改变。

http://7milediver.com/xingcan/550.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有