黑马程序员技术交流社区
标题:
求解决 函数4 跟5的区别,为什么
[打印本页]
作者:
403295277
时间:
2015-8-31 21:31
标题:
求解决 函数4 跟5的区别,为什么
//求大神指教。。。。请问void changNum5函数交换地址不能交换存储的内容?
#include "stdio.h"
void changNum1(int x,int y);
void changNum2(int x,int y);
void changNum3(int *x,int *y);
void changNum4(int *x,int *y);
void changNum5(int *x,int *y);
int main(){
int a = 5;
// int *a1 = &a;
int b = 4;
// int *b1 = &b;
printf("交换前a = %d,b = %d\n",a,b);
printf("---------\n");
printf("a的地址是:%p\nb的地址是:%p\n",&a,&b);
printf("---------\n");
changNum1(a,b);
printf("交换后\na = %d,b = %d\n",a,b);
printf("a的地址是:%p\nb的地址是:%p\n",&a,&b);
changNum2(a,b);
printf("交换后\na = %d,b = %d\n",a,b);
printf("a的地址是:%p\nb的地址是:%p\n",&a,&b);
changNum3(&a,&b);
printf("交换后\na = %d,b = %d\n",a,b);
printf("a的地址是:%p\nb的地址是:%p\n",&a,&b);
changNum4(&a,&b);
printf("交换后\na = %d,b = %d\n",a,b);
printf("a的地址是:%p\nb的地址是:%p\n",&a,&b);
changNum5(&a,&b);
printf("交换后\na = %d,b = %d\n",a,b);
printf("a的地址是:%p\nb的地址是:%p\n",&a,&b);
return 0;
}
void changNum1(int x,int y){
int temp;
temp = x;
x = y;
y = temp;
}
void changNum2(int x,int y){
x = x + y;
y = x - y;
x = x - y;
}
void changNum3(int *x,int *y){
int temp = *x; // int *temp;
temp = *x; // temp=x;
*x = *y; // x=y;
*y = temp; // y=temp;
}
void changNum4(int *x,int *y){
*x = *x + *y;
*y = *x - *y;
*x = *x - *y;
}
void changNum5(int *x,int *y){
int *temp;
temp=x;
x=y;
y=temp;
}
作者:
coding_wang
时间:
2015-8-31 22:38
num5中的 x y都是形式参数,形式参数值的改变无法影响实参 即&a &b的值 a与b的地址都没改变 所以值与地址都没变
num4中的 *x,*y指的是形参x y 所存储地址所指向的值 即a b的值 所以 a 与b的地址没变 但是所指向的值 已经改变.
作者:
wowthe1st
时间:
2015-8-31 23:12
就 3 4有效,其他交换都无效果,因为操作的是形参,并没有对原来的数进行操作
作者:
pyy061
时间:
2015-8-31 23:14
太长了...看不太懂
作者:
同舟ing
时间:
2015-9-1 21:34
不会啊!!!!
作者:
ai77033024
时间:
2015-9-1 21:47
变量地址储存的值并没有变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2