c语言行指针指针传参,目的是通过子函数交换实参地址,实现形参和实参的双向传递。但不能通过编译,求解。

百度题库旨在为考生提供高效的智能备考服务全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效垺务助您不断前行!

  函数的参数不仅可以是整型、实型、字符型等数据还可以是变量的指针,它将一个变量的首地址从主调函数传送到另一个函数中以间接的方式,实现了函数间数据雙向传递谭浩强先生用一个简单的例子:输入两个整数,按大小顺序输出函数处理,说明了指针的这类应用

1、【例】输入的两个整数按大小顺序输出用函数处理,而且用指针类型的数据作函数参数

swap是用户定义的函数,它的作用是交换两个变量(ab)的值swap函数的形参p1p2是指针变量。程序运行时先执行main函数,输入ab的值然后将ab的地址分别赋给指针变量pointer_1pointer_2,使pointer_1指向apointer_2指向b

接着执行if语句由于ab,因此执行swap函数注意实参pointer_1pointer_2是指针变量,在函数调用时将实参变量的值传递给形参变量。采取的依然是值传递方式因此虚实結合后形参p1的值为&ap2的值为&b这时p1pointer_1指向变量ap2pointer_2指向变量b

函数调用结束后,p1p2不复存在(已释放)如图

最后在main函数中输出的ab的值昰已经过交换的值。


2、请注意交换*p1*p2的值是如何实现的请找出下列程序段的错误

       一定要给你的指针变量赋初值,不要让他成为野指针否则他会桀骜不驯,成为一个很危险的东西

       遥想当年,他搞死过我的程序也使我的系统死过机,甚至摧毁了我的操作系统.......;你要格外小心不要让世界末日降临。

3、请考虑下面的函数能否实现实现ab互换

如果在main函数中用swap(a,b)调用swap函数,会有什么结果呢请看下图所示。

上面的分析再次验证了函数参数的单向值传递原则!!!

4、【例】请注意,不能企图通过改变指针形参的值而使指针实参的值改變

其中的问题在于不能实现如图所示的第四步(d)。

       函数使用指针作为参数时作为函数参数的一种,指针参数仍然也必须遵守单向值傳递的原则即指针参数中地址在被调函数中的改变,不会返回到主调函数

我要回帖

更多关于 c语言行指针 的文章

 

随机推荐