首页 理论教育C语言指针作为函数参数

C语言指针作为函数参数

【摘要】:指针变量既可以作为函数的形参,也可以作为函数的实参。所以,为了解决通过被调用函数来实现主调函数中变量值的改变,必须使用指针变量作为函数的形参。在执行被调用函数时,使形参指针变量所指向的变量的值发生变化。函数调用完成后,通过不变的实参指针变量将变化的值保留下来。图6.8程序运行结果说明:函数swap 的形参是两个整型指针变量p1 和p2,故主函数在调用时,必须使用变量a 和b 的地址,即&a 和&b 作为实参。

在C 语言中,函数参数的传送是单向传送,即数值从调用函数传送到被调用函数。因此,单向值传送用一个被调用函数是无法实现主调函数中变量值的改变。

指针变量既可以作为函数的形参,也可以作为函数的实参。指针变量作实参时,与普通变量一样,是值的传送,即指针变量的值(地址)传送给被调用函数的形参(指针变量)。因此,被调用函数不能改变实参指针变量的值,但是可以改变实参指针变量所指向的变量的值。

所以,为了解决通过被调用函数来实现主调函数中变量值的改变,必须使用指针变量作为函数的形参。在执行被调用函数时,使形参指针变量所指向的变量的值发生变化。函数调用完成后,通过不变的实参指针变量将变化的值保留下来。

【例6.5】 使用指针变量作为函数的形参,实现主调函数中变量值的改变。程序如下:

程序运行结果如图6.8 所示。

图6.8 程序运行结果

说明:

(1)函数swap 的形参是两个整型指针变量p1 和p2,故主函数在调用时,必须使用变量a 和b 的地址,即&a 和&b 作为实参。(www.chuimin.cn)

(2)执行函数swap 时,改变的是*p1 和*p2 的值,而不是p1 和p2 的值。调用返回时,&a 和&b(地址)不变,但a 和b 的值改变了。

【例6.6】用指针作为函数参数,给变量a 和b 输入两个整数,按升序输出。程序如下:

程序运行结果如图6.9 所示。

图6.9 程序运行结果

说明:

(1)在主函数中定义了两个指针p11 和p22,分别指向变量a 和b。

(2)在子函数swap()中定义了两个指针形参p1 和p2,当主函数调用函数swap()时,实参p11 和p22 将变量a 和b 的地址分别传送给形参p1 和p2,使形参p1 和p2分别指向变量a 和b。*p1 和*p2 的值互相交换,即变量a 和b 的值互相交换。