C语言指针变量最优解

在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。



像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。



有的时候,对于整数、小数、字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值。



有些初学者可能会使用下面的方法来交换两个变量的值:


  1. #include <stdio.h>
  2.  
  3. void swap(int a, int b){
  4. int temp; //临时变量
  5. temp = a;
  6. a = b;
  7. b = temp;
  8. }
  9.  
  10. int main(){
  11. int a = 66, b = 99;
  12. swap(a, b);
  13. printf("a = %d, b = %d\n", a, b);
  14. return 0;
  15. }

运行结果: a = 66, b = 99 从结果可以看出,a、b 的值并没有发生改变,交换失败。这是因为 swap() 函数内部的 a、b 和 main() 函数内部的 a、b 是不同的变量,占用不同的内存,它们除了名字一样,没有其他任何关系,swap() 交换的是它内部 a、b 的值,不会影响它外部(main() 内部) a、b 的值。 改用指针变量作参数后就很容易解决上面的问题:


  1. #include <stdio.h>
  2.  
  3. void swap(int *p1, int *p2){
  4. int temp; //临时变量
  5. temp = *p1;
  6. *p1 = *p2;
  7. *p2 = temp;
  8. }
  9.  
  10. int main(){
  11. int a = 66, b = 99;
  12. swap(&a, &b);
  13. printf("a = %d, b = %d\n", a, b);
  14. return 0;
  15. }

运行结果: a = 99, b = 66 调用 swap() 函数时,将变量 a、b 的地址分别赋值给 p1、p2,这样 *p1、*p2 代表的就是变量 a、b 本身,交换 *p1、*p2 的值也就是交换 a、b 的值。函数运行结束后虽然会将 p1、p2 销毁,但它对外部 a、b 造成的影响是“持久化”的,不会随着函数的结束而“恢复原样”。 需要注意的是临时变量 temp,它的作用特别重要,因为执行*p1 = *p2;语句后 a 的值会被 b 的值覆盖,如果不先将 a 的值保存起来以后就找不到了。 这就好比拿来一瓶可乐和一瓶雪碧,要想把可乐倒进雪碧瓶、把雪碧倒进可乐瓶里面,就必须先找一个杯子,将两者之一先倒进杯子里面,再从杯子倒进瓶子里面。这里的杯子,就是一个“临时变量”,虽然只是倒倒手,但是也不可或缺。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章