一、交换两个整数
方法一:通过函数交换两个数
void exchange(int a,int b){
int temp = a;
a = b;
b = temp;
printf("a=%d , b=%d\n",a,b);
printf("a=%p , b=%p\n",&a,&b);
}
int main(void){
int a = 5;
int b = 6;
exchange(a,b);
printf("a=%d , b=%d\n",a,b);
printf("a=%p , b=%p\n",&a,&b);
return 0;
}
运行结果:
函数内的结果:
a=6 , b=5
a=000000000061fdf0 , b=000000000061fdf8
函数外的结果:
a=5 , b=6
a=000000000061fe1c , b=000000000061fe18
这种方法显然是达不到预期结果的,实参的地址与形参地址不同,也就是说实参与形参不是一个变量。函数内仅仅交换了形参,函数运行完空间释放,实参a和b的值还是原来的值。
方法二:通过地址去改变
void exchange_2(int *q,int *p){ //q,p存放着a,b的地址
int temp = *q; //*q,*p就是实参a,b
*q = *p;
*p = temp;
printf("q=%d , p=%d\n",*q,*p);
printf("q=%p , p=%p\n",&q,&p);
}
int main(void){
int a = 5;
int b = 6;
//exchange_1(a,b);
exchange_2(&a,&b); //传入a,b的地址
printf("a=%d , b=%d\n",a,b);
printf("a=%p , b=%p\n",&a,&b);
return 0;
}
运行结果:
函数内:
q=6 , p=5
q=000000000061fdf0 , p=