交换两个整型变量的数值

Posted 李胡仪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交换两个整型变量的数值相关的知识,希望对你有一定的参考价值。

 #include<stdio.h>
void swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}
main()
{ int a=5,b=4,*p,*q;
p=&a; q=&b;
swap(p,q);
printf("a=%d b=%d",a,b);
return 0;
}
 

 

a=4 b=5
--------------------------------
Process exited after 0.0114 seconds with return value 0
请按任意键继续. . .

 

 

 总结:

1,swap是用户定义的函数,它的作业是交换量(a和b)的值,它的形参p和q是指针变量。

2,程序运行时,先执行mian函数 ,输入a和b的值。然后将a和b的地址分别赋给指针变量p和p.

3,注:实参p和p是指针变量,在函数调用时,将实参变量的值传递给形参变量。

4,注:方法是交换a和b的值,而p和q的值不变。

二:void swap(int *p,int *q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换?

 

#include<stdio.h>
void swap(int *p,int *q)
{int *m;
*m=*p;
*p=*q;
*q=*m;
}

   main()
   { int a=10,b=20,*x=&a,*y=&b;
     swap(x,y);
     printf("%d%d",a,b);
   }

 

 1.编译器显示发现错误,停止工作  。

   2.定义的子函数void swap(int *p,int *q),参数为指针型,所以传递的值是地址,而不是值传递。

   3.应该将地址传递到子函数中 传递 指针变量.

  三、void swap(int *p,int *q){int *m;m=p;p=q;q=m;}为何无法实现?

 

#include<stdio.h> 
void swap(int *p,int *q)
{int *m;
   m=p;
   p=q;
   q=m;}
 
    main()
    { int a=10,b=20,*x=&a,*y=&b;
      swap(x,y)
      printf("%d%d",a,b);
     }

10 20
10 20

--------------------------------
Process exited after 1.468 seconds with return value 0
请按任意键继续. . .

1. 程序正常编译并运行,但是并没有实现两个数交换!

2.在swap函数中交换了指针p,q的地址,但未将其所储存的值进行交换,所以参数的地址和值不变。

3. 因为执行值传递,所以形参值的改变不能使实参的值随之改变。

四.构建comp函数,实现两个整数比较,比较大的值通过返回值返回给main。要求comp的参数和返回值都是指针类型数据。

 

 #include<stdio.h>
  int *comp(int *x,int *y)
     {
      return *x>*y? x:y;
      } 
  int main()
{
      int a,b,*p;
     scanf("%d,%d",&a,&b);
     p=comp(&a,&b);
     printf("max=%d\\n",*p);
 }

输入a,b的值:2,4
2 4
comp函数调用后输出较大的值:4

--------------------------------
Process exited after 3.205 seconds with return value 30
请按任意键继续. . .

 1:通过指针的大小比较,决定指针参数,在main函数里调用。

 

总结:1:一些零碎的知识点还没有理解透彻;

        2:编程时还有要点没有领悟。

 

以上是关于交换两个整型变量的数值的主要内容,如果未能解决你的问题,请参考以下文章

交换两个整形变量的数值

不用中间变量交换两个数值变量的值

物品交换(变量)

Java整型变量和整型常量4 Java变量交换的两种方式无第三方变量

三种方法实现整型数值交换

只用两个变量,不借助第三个变量来交换值