首页 > 电脑

指针将三个数排大小swap函数在调用后为什么exchange函数指针值没调换

更新时间2018-03-06 21:28:40

#include<stdio.h>

 

void swap(int *p1,int *p2)

{int tmp;

 tmp=*p1;

 *p1=*p2;

 *p2=tmp;

}

void exchange(int *pt1,int *pt2)

{if(*pt1<*pt2)

 {

 swap(pt1,pt2);

 }

 printf("%d",*pt1);

}

int main()

{int a;

int b;

int *p1;

int *p2;

a=10;

b=1;

p1=&a;

p2=&b;

exchange(p1,p2);

return 0;

 

}


两个问题归根结底都是参数传递的问题:对于你的交换函数swap(int a, int b)来说,如果你不使用指针,在函数内,操作的实际上是a和b的一份副本,从上层来说,可以这样理解,在调用swap之前,系统做了这样的调用:int temp_a = a;                  int temp_b = b;swap(temp_a, temp_b),也就是说在swap中,你操作的实际上是temp_a和temp_b,最终结果不会对a、b造成影响,当然这种理解并不精确,只是为了方便说明;而传递指针时,传递的实际上是参数的地址,例如,对于函数:void swap(int *a, int *b),打个比方,如果a的地址是0xA,b的地址是0xB,这个地址对整个进程空间都是一致的,函数内部对地址内的值进行操作,因此最终会影响到a和b的值。

你有条件才交换的:

if(*pt1<*pt2)

因为*pt1为10,*pt2为1

10<1不成立,就不会调用swap了

反之,若a=1,b=10就会调用swap了


相关标签:小s

上一篇:一道关于迭代法的c语言题目,问题写在不懂的步骤旁边了,希望大佬解答,多谢

下一篇:帮忙看看是不是题目有问题。What_____yournewteacher______?