采用指针作参数,可以传递参数的地址,实现由形参修改实参的效果。
当调用形参是指针变量的函数时,将实参变量地址传给形参指针变量,调用结束,就实现了由形参修改实参的效果。
例如:下面的程序段。
在该程序段中,实参p和形参a都是指针变量。先使实参指针变量p指向数组num,p的值是&num[0],然后将p的值传送给形参指针变量a,a的初始值也是&num[0]。通过a的值的改变,可以使a指向数组num的任一元素。
例6-6 编写一个程序,使用指针变量作参数的函数,将一个float型的值分解为整数部分与小数部分。
参考程序:
程序运行结果如图6-9所示。
图6-9 程序运行结果
程序运行结果分析:
在上面的代码中,我们应该注意到以下几点。
①函数decompose的第2个与第3个形参被声明为指针类型。
②在main函数中调用函数decompose时,将变量ipart和fpart的地址作为实参传递。(www.xing528.com)
③在decompose函数体中使用了间接访问运算符“*”对指针型形参所指向的变量进行了赋值。
由于在调用函数decompose时的第2个实参与第3个实参分别是变量ipart和fpart的地址,参数传递完成后,函数decompose的3个形参的状态如图6-10(a)所示。decompose函数体中的第一条赋值语句将f转换为int型,并将此值存储在intpart所指的存储单元中。由于intpart当前指向main函数中的ipart变量,因此执行此赋值就把值518放到ipart变量中。第二条赋值语句执行时把intpart所指向的存储单元值取出,即将main函数中的ipart变量值取出,并且用f值减去它,得到0.457794。然后将这个值存储到fracpart指向的存储单元中,即main函数中的fpart变量中,结果如图6-10(b)所示。当函数decompose执行完返回主调函数时,变量ipart和fpart也就分别有了值518和0.457794。
图6-10 函数decompose()的3个形参的状态
2.通过传送地址值在被调用函数中直接改变调用函数中的变量值
通过传送地址值,可以在被调用函数中对调用函数中的变量进行引用。利用这种形式可以把两个或两个以上的数据从被调用函数返回到调用函数。
地址传送值的含义是在被调用函数中的形参与调用函数中的实参指向同一个存储单元,在调用函数的过程中,可对存储单元的值做修改,当调用函数过程结束后,该值会成为实参的当前值。
例6-7 通过传送地址值在被调用函数中直接改变调用函数中的变量值示例。
程序运行结果如图6-11所示。
图6-11 程序运行结果
从此例可知,C语言程序中可以通过传送地址的方式在被调用函数中直接改变调用函数中的变量的值,从而达到函数之间数据的传递。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。