指针在函数中的应用

        函数是为了完成某项特定功能的代码块,函数的操作的基础是数据。函数调用时所传递的数据就是所谓的函数参数。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;
} 

        通过修改,程序运行达到了预期的结果。程序运行结果如下:


        通过对两个例子的比较,我们发现修改后的程序在传参时,实参由a、b变成了指向a、b的指针,即二者的地址。因此得出结论,要想改变主调函数的变量值,就得把主调函数的指针作为实参,传递给被调函数,不能仅仅传递变量值。

猜你喜欢

转载自blog.csdn.net/Wangguang_/article/details/81061640