当前位置:   article > 正文

C语言--指针交换两个变量_一个程序,定义两个整型变量,使用指针交换这两个变量的值

一个程序,定义两个整型变量,使用指针交换这两个变量的值

何为指针?指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

例如:

  1. int *p; //* 表示指针说明符:说明变量p是一个指针,只会在定义变量的时候出现
  2. int a;
  3. p = &a; // &符号表示取a的地址,如果a是数组p=a,表示数组的首地址
  4. a=5; // *p = 5; *代表指针运算符,访问对应地址里面的内容

今天要说的是,两个变量之间的交换,用普通的变量和指针有何不同?先来看下面的一个例子:

这里提一下,关于交换变量的几种方法,详见C语言交换变量方法,这里就不再重复了。

  1. #include<stdio.h>
  2. void swap(int x,int y){
  3. //交换前的x,y
  4. printf("x,y交换前: x = %d,y = %d\n",x,y);
  5. x^=y;
  6. y^=x;
  7. x^=y;
  8. //交换后的x,y
  9. printf("x,y交换后: x = %d,y = %d\n",x,y);
  10. }
  11. int main(){
  12. int a=9,b=2;
  13. //交换前的a,b
  14. printf("a,b交换前: a = %d,b = %d\n",a,b);
  15. swap(a,b);
  16. //交换后的a,b
  17. printf("a,b交换后: a = %d,b = %d\n",a,b);
  18. }

相信大家都很明白,这个方法无非就是交换a,b两个变量的值,但是,结果是怎样呢?

x,y的值发生了交换,但是a,b的值并未发生交换,这是因为我们只是将a,b的值作为一个参数传递到swap中,我们改变的只是函数swap里面的数据,若是要使a,b两个变量的值交换,需要怎么做呢?

这里,就要用到我们的指针了,其实,两个对比之后你会发现,代码几乎没变,只是之前是传入a,b的值,现在传的是a,b的地址。

  1. #include<stdio.h>
  2. void swap(int *x,int *y) {
  3. printf("x,y交换前: x = %d,y = %d\n",*x,*y);
  4. *x^=*y;
  5. *y^=*x;
  6. *x^=*y;
  7. printf("x,y交换后: x = %d,y = %d\n",*x,*y);
  8. }
  9. int main() {
  10. int a=9,b=2;
  11. printf("a,b交换前: a = %d,b = %d\n",a,b);
  12. swap(&a,&b);
  13. printf("a,b交换后: a = %d,b = %d\n",a,b);
  14. }

接下来,来看看它的结果:

其实,这也不难理解,毕竟我传的是一个地址过去,地址里面的值发生改变,但是我a,b的地址并没有变,所以说a,b的值就也发生改变了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码优化者/article/detail/63033
推荐阅读
相关标签
  

闽ICP备14008679号