A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//求大神指教。。。。请问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;


}

5 个回复

倒序浏览
num5中的 x y都是形式参数,形式参数值的改变无法影响实参 即&a &b的值 a与b的地址都没改变 所以值与地址都没变
num4中的 *x,*y指的是形参x y 所存储地址所指向的值 即a b的值  所以 a 与b的地址没变 但是所指向的值 已经改变.
回复 使用道具 举报
就 3 4有效,其他交换都无效果,因为操作的是形参,并没有对原来的数进行操作
回复 使用道具 举报
太长了...看不太懂
回复 使用道具 举报
不会啊!!!!
回复 使用道具 举报
变量地址储存的值并没有变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马