失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 指针变量作为函数参数

指针变量作为函数参数

时间:2022-03-08 02:14:49

相关推荐

指针变量作为函数参数

指针变量作为函数参数

1、首先来看一个例子2、现在,用函数实现3、感悟

1、首先来看一个例子

输入a、b两个整数,按先大后小的顺序输出a和b。

代码:

#include<stdio.h>int main(){int *p1,*p2,*p,a,b;printf("Please enter two integer number:");scanf("%d %d",&a,&b);p1 = &a;p2 = &b;if(a<b){p = p1;p1 = p2;p2 = p;}printf("a = %d b = %d\n",a,b);printf("max = %d min = %d\n",*p1,*p2);return 0;}

运行结果:

代码分析:

可以看到,a和b的值并没有改变,但是p1和p2的值已经发生了改变。

2、现在,用函数实现

用指针变量作为函数的参数,它的作用是将一个变量的地址传送到另一个函数中

代码:

#include<stdio.h>int main(){void swap(int *p1,int *p2);int a,b;int *pointer_1,*pointer_2;printf("Please input two integer numbers: ");scanf("%d %d",&a,&b);pointer_1 = &a;pointer_2 = &b;if(a<b)swap(pointer_1,pointer_2);printf("max = %d min = %d\n",a,b);return 0;}void swap(int *p1,int *p2){int temp;temp = *p1;*p1 = *p2;*p2 = temp;}

运行结果:

代码分析:

此程序采用的方法是交换a和b的值,而而p1和p2的值没有改变,p1仍然指向a,p2仍然指向b。

为了使在函数中改变的变量的值能被主调函数main使用,应该用指针变量作为函数的参数,在函数的执行过程中,使指针变量所指向的变量的值发生变化,函数调用结束后,这些变量的值的变化依然保留了下来。 这样就可实现:通过调用函数使变量的值发生变化,在主调函数中可以使用这些改变了的值。

注意,不能企图通过改变指针形参的值而使指针实参的值改变。如下例子:

代码:

#include<stdio.h>int main(){void swap(int *p1,int *p2);int a,b;int *pointer_1,*pointer_2;printf("Please input two integer numbers: ");scanf("%d %d",&a,&b);pointer_1 = &a;pointer_2 = &b;if(a<b)swap(pointer_1,pointer_2);printf("max = %d min = %d\n",*pointer_1,*pointer_2);return 0;}void swap(int *p1,int *p2){int *p;p = p1;p1 = p2;p2 = p;}

运行结果:

代码分析:

在C语言中,实参变量和形参变量之间的数据传递是单向的“值传递”方式,指针变量作为函数参数时同样遵循这一规则。不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向的变量的值。函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作为函数参数,可以得到多个变化了的值。要善于利用指针。

3、感悟

其实,把指针变量作为函数参数进行传递的时候,当实参传递到形参后。此时,对于实参所指向的变量的值,有两个指针变量指向它,一个是实参,一个是形参。也就是说,变量的值有两种方式可以使用它。在函数中,形参使用变量的值,并且改变它。由于实参也指向这些变量,因此实参所指向的值自然也就改变了。变量是固定的,在内存中只有“一个”。而指向它的指针变量(使用它的值的方式)却有两种(实参和形参),当其中的一种方式改变了变量的值的时候,这个“唯一的”变量的值就改变了,而对于指向它的其他指针变量来说,指向的值就改变了。

如果觉得《指针变量作为函数参数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。