简介
函数中的变量通常为局部变量,它们属于函数私有,不同函数间的即使是同名变量也互不影响,这也使得在某些情况下,函数中的某些变量的值传递给另一个函数后实际上并不能影响到主函数的变量。
而指针则提供了解决函数间通信的办法。
指针使用实例
接下来将编写一个函数,使其能做到将输入的两个double类型变量的值都赋为其中较大的值。
首先定义此函数为 void lg(double* x,double* y)(该函数直接改写地址上的值,故无需返回数值。)
接下来明确函数内容,要将两值中较大一值赋给两值就需要条件语句来判断两值大小,然后再利用指针改写内存地址上的值。
void (doublex,doubley)
{ if(x>y) *y=*x;
else *x=*y; }
这里直接将原较小值的地址赋予较大值的地址上的值即可完成将两数赋为最大值。
主函数则合理安排输入输出即可
void main()
{ double a,b;
scanf(“%lf,%lf”,&a,&b);
lg(&a,&b);
printf("%lf,%lf“,a,b); }
注意函数形式参数为指针变量,故输入实际参数应为其地址。
然后写入ide运行
可以看到我们在主函数中输入的局部变量a,b值在另一个函数中完成了转换。原本主函数在lg()函数眼中就是一个黑箱,主函数中发生的一切其都不可知,仅能接受到其传递的值给于参数,反之亦然,各自变量相互独立,互不影响。而指针实际则将两个函数联系了起来,通过地址传递的方式,因为内存地址是程序中能够共享的信息。
反例说明
为了进一步阐明,以下做出反例。
如上,在仅试图输入a,b原值的情况下函数好像并没有任何反应,而printf输出的不过是scanf输入的原a,b值。
这是因为lg()中的输入的变量a,b并不是主函数中的a,b。主函数中的a,b的值虽然输入进lg()函数完成了转变,但实际上转变的也只是lg()函数中的变量,输入lg()函数的a,b的值和主函数的a,b没有任何关系。所以实际上lg()函数虽然完成了一次工作但对于主函数则没有任何影响。
以上便是指针部分作用的使用与探讨。