关于数据交换的测试分析

关于数据交换的测试分析

本人在经过多次学校的考试题目折磨后,终于下定决心对数值交换类似题目做一个总结分析。其中包含直接交换、通过指针交换、引用交换。下面附上本人的代码,该代码可以较清晰的反映这类题的考察点。大家可以自行研究。

using namespace std;
#include<iostream>
void swap1(int *x,int *y)
{
    
    
	cout<<"before x="<<x<<endl;
	cout<<"before y="<<y<<endl;
	cout<<"before *x="<<*x<<endl;
	cout<<"before *y="<<*y<<endl;
	int *z;
	z=x;
	x=y;
	y=z;
	cout<<"after x="<<x<<endl;
	cout<<"after y="<<y<<endl;
	cout<<"after *x="<<*x<<endl;
	cout<<"after *y="<<*y<<endl;
}
void swap2(int *x,int *y)
{
    
    
	cout<<"before x="<<x<<endl;
	cout<<"before y="<<y<<endl;
	int z;
	z=*x;
	*x=*y;
	*y=z;
	cout<<"after x="<<x<<endl;
	cout<<"after y="<<y<<endl;
}
void swap3(int **x,int **y)
{
    
    
	cout<<"before x="<<*x<<endl;
	cout<<"before y="<<*y<<endl;
	int *z;
	z=*x;
	*x=*y;
	*y=z;
	cout<<"after x="<<*x<<endl;
	cout<<"after y="<<*y<<endl;
}
int main()
{
    
    
	int a=1,b=2,*pa,*pb;
	pa=&a;
	pb=&b;
	swap1(pa,pb);
	//swap2(pa,pb);
	//swap3(&pa,&pb);
	cout<<"a="<<a<<endl;
	cout<<"b="<<b<<endl;
	cout<<"pa="<<pa<<endl;
	cout<<"pb="<<pb<<endl;
	cout<<"*pa="<<*pa<<endl;
	cout<<"*pb="<<*pb<<endl;
	return 0;
}

本代码定义了三个函数,分别为swap1,swap2,swap3。其中前两者的形参为一级指针,第三个为二级指针。在正式讲述之前,再放出两组代码。请读者先自行复制代码尝试是否能在脑海中自学完成。
下面代码为查看函数调用时形参与实参的地址。

using namespace std;
#include<iostream>
void swap(int x,int y)
{
    
    
	cout<<"&x="<<&x<<endl;
	cout<<"&y="<<&y<<endl;
	int z;
	z=x;
	x=y;
	y=z;
	cout<<"&x="<<&x<<endl;
	cout<<"&y="<<&y<<endl;
}
int main()
{
    
    
	int a=1,b=2;
	cout<<"&a="<<&a<<endl;
	cout<<"&b="<<&b<<endl;
	swap(a,b);
	return 0;
}

下面代码为南京理工大学某一考试题。

using namespace std;
#include<iostream>
void f1(int *s1,int *s2)
{
    
    
	int s3=*s1;
	*s1=*s2;
	*s2=s3;
}
void f2(int *s1,int *s2)
{
    
    
	int *s3=s1;
	s1=s2;
	s2=s3;
}
void f3(int *s1,int *s2)
{
    
    
	int *p1=new int;
	int s3=*s1;
	*p1=*s2;
	*s2=s3;
}
int main()
{
    
    
	int a=1,b=2;
	int *pa=&a,*pb=&b;
	f1(pa,pb);cout<<a<<' '<<b;
	f2(pa,pb);cout<<a<<' '<<b;
	f3(pa,pb);cout<<a<<' '<<b;
	return 0;
}

这种类型题目本质在于指针指向元素,在不影响元素本身的情况下,任何使用调换都是徒劳的。

猜你喜欢

转载自blog.csdn.net/weixin_52017909/article/details/112690108