C语言中,函数的参数可以是整型,实型,字符型,指针类型;如果用指针做为函数参数传到被调用函数的话,可以实现使变量的值发生变化,在主调函数(例如:main函数中)使用这些已经改变了的值的目的。先看段代码吧
代码 #include swap(int *a,int *b) { *a=*a+*b; *b=*a-*b; *a=*a-*b; } main() { int a,b; int *p1,*p2; printf("请输入两个数据用于交换:"); scanf("%d,%d",&a,&b); p1=&a; p2=&b; swap(p1,p2); printf("\n不用第三方变量的交换结果是:%d,%d\n",a,b); } 这是一段经典的C语言中不使用临时变量实现两个变量交换的代码。在main函数中定义了两个整型变量,两个指针变量,并使p1=&a,p2=&b;然后调用swap函数,看结果吧
已经实现了两个数的交换 。 然后把swap函数改一下,改成如下: swap(int *a,int *b) { int *temp; *temp=*a; *a=*b; *b=*temp; } 改成这样子之后就报错了。。
究其原因是因为指针变量temp无确定地址,它的值是不可预见的。。 当把函数改为这样子的时候也是不行的。 swap(int a,int b) { int temp; temp=a; a=b; b=temp; } 调用这个版本的函数,形参a,b的值是改变了,但主调函数却使用不了改变后的值。。 下面的写法就可以在主调函数中使用改变后的值了。 swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } C语言的指针用法太灵活了,代码在书写过程中也没有注意编码规范。 |