Coutinho的day2(排序问题的函数调用)

今天,我在使用函数调用两个数字交换顺序时,遇到了一个问题,如下

int exchange(int *x, int *y)
{     int t;        
      t = *x;        
      *x = *y;        
      *y = t;}
void main()
{        
   int a, b, *m, *n;        
   scanf("%d%d", &a, &b);        
      m = &a;        
      n = &b;        
     exchange(m, n);        
     printf("%d%d", a, b);       
     }

很明显这是一个简单的调用,将输入的两个数字,交换顺序,但是,作为一个初学者的我,是这样的

int exchange(int x, int y)
{     int t;        
      t = x;        
      x = y;        
      y = t;}
void main()
{        
   int a, b, *m, *n;        
   scanf("%d%d", &a, &b);        
      m = &a;        
      n = &b;        
     exchange(m, n);        
     printf("%d%d", a, b);       
     }

这两个代码,很相似,但是第二段代码却不会输入交换后的数字,而结果是输入和输出一模一样,原因是什么了?
当我查阅各种资料得到
重点!!!!!!
如下
第一段代码:将a、b两个数的地址传入exchange()函数,此函数内部拿着这两个数的地址,将两个地址下的值做了交换;
第二段代码:将a、b两个数的地址传入exchange()函数,此函数内部将这两个地址彼此做了交换(即两个指针所指的地址发生了互换,但相应地址下的数并没有变化)。因为对于函数exchange()来说,传入的两个地址是值传递形式的,在其内部是局部作用域下的两个变量,完成这两个地址“值”的交换,并不能对调用时的实参产生影响。故而交换失败。

发布了4 篇原创文章 · 获赞 5 · 访问量 154

猜你喜欢

转载自blog.csdn.net/weixin_46052798/article/details/105240779
今日推荐