C语言指针作为函数参数

了解了指针的基本概念,接下来让我们看看如何把指针作为函数的参数,来交换两个变量的值。

C语言代码清单 1:指针作为函数的参数间接交换两个变量的值
#include <stdio.h>
#include <stdlib.h>
/*--自定义函数:将指针px、py指向的变量的值进行互换--*/
void swap(int *px, int *py)
{
    int temp = *px;
    *px = *py;
    *py = temp;
}
/*--主函数--*/
int main( )
{
    system("color 70");
    int dA, dB;
    puts("请输入两个整数:");
    printf("整数dA:");
    scanf("%d",&dA);
    printf("整数dB:");
    scanf("%d",&dB);
    swap(&dA, &dB);
    puts("互换以后的变量值:");
    printf("    dA = %d\n",dA);
    printf("    dB = %d\n\n",dB);
    system("pause");
    return 0;
}

运行结果为:

请输入两个整数:
整数dA:10
整数dB:8
互换以后的变量值:
    dA = 8
    dB = 10


通过swap(&dA,&dB);调用 swap( ) 函数后,作为实参的变量地址 &dA 和 &dB 分别被赋值给定义为指针的形参变量 px 和 py,此时指针变量 px 和 py 分别指向变量 dA 和 dB,*px 和 *py 则成为 dA 和 dB 的别名。因而,在 swap( ) 函数内交换 *px 和 *py 的值,就相当于变量 dA 和 dB 的值进行了交换(见图 1)。

函数调用中指针的传递
图 1:函数调用中指针的传递

指针和 scanf() 函数

在使用 scanf( ) 函数从键盘读取数据时,变量名前必须加上一个特殊符号&,这个符号就是取址符。实际上 scanf( ) 函数接收的就是指针(具有内存地址的“值”),由该指针所指的对象(变量)保存从键盘输入的值。

因此,调用 scanf( ) 函数实际上就是将读取到的值存入内存地址指向的变量对象当中(见图 2)。

scanf( ) 函数的调用和 printf( ) 函数的调用
图 2:scanf( ) 函数的调用和 printf( ) 函数的调用