函数是为了完成某项特定功能的代码块,函数的操作的基础是数据。函数调用时所传递的数据就是所谓的函数参数。C语言中的函数参数分为两大类:一类传递的是变量的值,称之为普通参数;另一类传递的是变量的地址,称之为指针参数。
指针用作函数参数,传递的是变量的地址,也就是说是指针变量的值。为什么要传递变量的地址呢?最简单的例子就是交换两变量的的数值了。请看下面的例子:
#include<stdio.h>
#include<stdlib.h>
void swap(int a,int b) //交换函数
{
int swap;
swap=a;
a=b;
b=swap;
printf("交换后的a、b的值分别为:%d,%d\n",a,b);
}
int main()
{
int a,b;
a=10;
b=20;
swap(a,b); //调用函数交换a、b
printf("a的值为:%d\n",a);
printf("b的值为:%d\n",b);
return 0;
}
程序运行结果如下:
编写这个程序的目的是通过对swap函数的调用,实现对a和b的数据交换。但是程序运行结果显示数据并没有被交换,让我们来分析一波代码,思考为什么没能实现预期功能。
在函数调用时,swap函数是将形参a、b的值进行交换,但是并不能将实参进行交换。原因是函数调用时,给形参分配单独的空间,实参将值传递给形参时,实际上是将实参的值存放在形参的内存,形参的值是实参的备份,所以形参的交换,并不能达到交换实参的目的。那我们应该怎么做才能使数据交换呢?这就需要使用指针了。
在函数调用时,用指针进行函数传参,即传递变量的地址。在被调函数中,通过指针对变量进行操作,就相当于直接对变量本身就行操作。我们将程序进行修改,就得到了下面的程序;
扫描二维码关注公众号,回复:
4347558 查看本文章
#include<stdio.h>
#include<stdlib.h>
void swap(int *a,int *b) //交换函数
{
int swap;
swap=*a;
*a=*b;
*b=swap;
printf("交换后的a、b的值分别为:%d,%d\n",*a,*b);
}
int main()
{
int a,b,*pa,*pb;
a=10;
b=20;
pa=&a;
pb=&b;
swap(pa,pb);
printf("a的值为:%d\n",a);
printf("b的值为:%d\n",b);
return 0;
}
通过修改,程序运行达到了预期的结果。程序运行结果如下: