C/C++ 有关swap的 用swap交换两个结构体的时候驶是如何交换的,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 有关swap的 用swap交换两个结构体的时候驶是如何交换的,相关的知识,希望对你有一定的参考价值。

是一个结构直接对另一个结构赋值吗?
还有怎样让两个结构交换地址?
用swap可以吗?怎样实现??????

可以用swap,需要自己再做点封装的工作
《effective c++ 》条款25会对你有所帮助
可以下载电子版预览一下追问

是不是得用结构体指针?如果不是 给点提示呗

追答

用吧,用指针可以提高效率,我给你发个pdf你看吧,很久不玩c++了,有些东西都忘了
用标准库swap函数,你得明白它是怎么工作的,然后我们又能对它做些其它的什么工作来提高效率

参考技术A 让两个结构交换地址····
不如说是 让两个指针交换它的值吧~~~
而且两个指针必须是相同类型的。
不同类型进行交换的话 需要进行强制类型转换,而且十分不安全。追问

是的 可以这样说,那么可以让两个类型相同的结构体交换地址吗?
怎样换?

参考技术B swap是神马?追问

函数 C/C++里面的函数a=1,b=2;swap(a,b);可以交换两个数的值

用swap 交换两个数

1、构建swap函数,实现两个整型变量数值的交换,且使用指针类型的数据作为swap函数的参数。

#include<stdio.h> main() {  void swap(int *p1,int *p2);//定义swap函数,用于交换。  int *p,*q;  int a,b; //定义两个指针变量和两个数a和b  printf("请输入两个数:");  scanf("%d,%d",&a,&b);//输入两个数  p=&a;  q=&b;//将p和q分别指向a和b的地址  swap(p,q);//调用swap函数对p和q执行交换    printf("\\n经过交换为:%d,%d",a,b);//输出交换后a和b的值 }  void swap(int *p1,int *p2)//定义函数内容  {    int temp;  temp=*p1;     *p1=*p2;  *p2=temp;//用变量temp实现p1与p2的交换
}


请输入两个数:22,33


经过交换为:33,22
--------------------------------
Process exited after 6.716 seconds with return value 0
请按任意键继续. . .

 

总结:1 编程后想调用函数应用指针*temp来交换p1与p2的,后来运行结束后发现没有交换,后来用将 *temp赋给其他变量才得以交换,不过复杂了很多,多此一举,所以用变量temp最为合适。

2 运行是逗号没有发现是中文的,导致久久没有发现问题,所以一定细心编程,及时修改错误。

3 通过调用函数来实现指针间的交换地址,进而实现交换两个数,所以修改数可以直接通过指针直接来对数的修改,比正常运用函数来修改数更为便利。

2: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;
}
int main()
{
 int a,b; //定义变量a,b
 scanf("%d,%d",&a,&b) ; //输入数,对a和b赋值
 swap(&a,&b); //用swap交换a和b
 printf("a=%d b=%d",a,b); //输出交换后数值
 return 0;
}
 
 

1.2

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

总结:运行后出现失败,原因是因为定义的指针m是一个存放地址的变量,但只是简单的定义,我们知道指针是指向数据的内存地址,而这里他是空的,他不指向任何对象,相当于没有箭头指向,而却想要和其他变量交换,是不能的,所以出现运行后失败的出现。如果想要正常运行,可以给*m指向一个c,并对c赋初始值,才可以交换。

#include<stdio.h>
void swap(int *p,int *q) //定义函数,两个整型变量数值的交换 
{
    int *m,c; //这里出现错误
    c=0;  
    m=&c; 
    *m=*p;
    *p=*q;
    *q=*m;
}
int main()
{
    int a,b; //定义变量a,b 
    scanf("%d,%d",&a,&b) ; //输入数,对a和b赋值 
    swap(&a,&b); //用swap交换a和b 
    printf("a=%d b=%d",a,b); //输出交换后数值 
    return 0;
}

1,2
a=2 b=1
--------------------------------
Process exited after 7.233 seconds with return value 0
请按任意键继续. . .

 

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;
}
int main()
{
    int a,b; //定义变量a,b 
    scanf("%d,%d",&a,&b) ; //输入数,对a和b赋值 
    printf("a=%p b=%p\\n",a,b);//输出用swap之前a和b的地址 
    swap(&a,&b); //用swap交换a和b 
    printf("a=%p b=%p\\n",a,b);//输出用swap之后a和b的地址 
    printf("a=%d b=%d",a,b);//输出用swap之后a和b的值 
    return 0;
}

1,2
a=0000000000000001 b=0000000000000002
a=0000000000000001 b=0000000000000002
a=1 b=2
--------------------------------
Process exited after 6.793 seconds with return value 0
请按任意键继续. . .从

总结:由地址和输出a和b的值可以看出地址和数值都没有发生交换,从a和n通过调用变为指针p和q的交换,而这种交换却只是指向,连地址都没有交换,做的是没有任何用的交换,从而输出a和b是不发生交换的。

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

#include<stdio.h>
int comp(int *p1,int *p2)//定义函数comp 
    {
    if(*p1>*p2)  //用if语句来比教较p1与p2大小来执行交换 
      return *p1;
    else
      return *p2;//如果大于返回*p1给max,小于返回*p2给max. 
    }

main()
{
    
    int a=25;
    int b=66;
    int max;
    int *c,*d;
    c=&a;
    d=&b;  //将c指向a,  b指向d. 
    max=comp(c,d); //用comp函数进行交换 
    printf("max=%d\\n",max); //输出最大值max 
    return 0;
}

max=66


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


总结:指针变量比较时直接对地址访问,从中感觉到形参与实参交相互应,用指针感觉会使枯燥的函数变得有声有色,像是多了更多的路径,今后的问题要根据结果来进行合适的选择。

 

以上是关于C/C++ 有关swap的 用swap交换两个结构体的时候驶是如何交换的,的主要内容,如果未能解决你的问题,请参考以下文章

c语言中swap 是啥意思?

英文,swap,啥意思?

求一个C语言程序题:编写一个函数SWAP()实现交换两个数位置的功能

c语言swap指针

怎样用c++编程进行高低位互换?

交换两个数的值