第六章善于使用指针与引用

//p161
//通过指针变量访问整型变量
#include <iostream>
using namespace std;
int main()
{
	int a,b;
	int *pointer_1,*pointer_2;
	a=100;
	b=10;
	pointer_1=&a;
	pointer_2=&b;
	cout<<a<<" "<<b<<endl;
	cout<<*pointer_1<<" "<<*pointer_2<<endl;
	return 0;
}

运行结果:


//p162
//用指针变量处理,按先后大小输出a,b
#include <iostream>
using namespace std;
int main()
{
	int *p1,*p2,*p,a,b;
	cin>>a>>b;
	p1=&a;
	p2=&b;
	if(a<b)
	{
		p=p1;
		p1=p2;
		p2=p;
	}
	cout<<"a="<<a<<" b="<<b<<endl;
	cout<<"max="<<*p1<<" min="<<*p2<<endl;
	return 0;
}
运行结果:


//p163
//用指针作函数参数,按先后大小输出a,b
#include <iostream>
using namespace std;
int main()
{
	void swap(int *p1,int *p2);
	int *pointer_1,*pointer_2,a,b;
	cin>>a>>b;
	pointer_1=&a;
	pointer_2=&b;
	if(a<b)//如果a<b,使 *pointer_1,*pointer_2互换
		swap(pointer_1,pointer_2);
	cout<<"max="<<a<<" min="<<b<<endl;
	return 0;
}
void swap(int *p1,int *p2)
{
	int temp;
	temp=*p1;
	*p1=*p2;
	*p2=temp;
}
运行结果:


//p167
//用三个指针变量指向三个整型变量,用swap函数实现互换三个变量的值
#include <iostream>
using namespace std;
int main()
{
	void exchange(int *,int *,int *);//对exchange函数的声明
	int a,b,c,*p1,*p2,*p3;
	cin>>a>>b>>c;
	p1=&a;
	p2=&b;
	p3=&c;
	exchange(p1,p2,p3);//交换p1,p2,p3指向的三个整型变量的值
	cout<<a<<" "<<b<<" "<<c<<endl;
	return 0;
}
void exchange(int *q1,int *q2,int *q3)
{
	void swap(int *,int *);//对swap函数声明
	if(*q1<*q2)
		swap(q1,q2);//调用swap函数,将q1与q2所指向的变量的值互换
	if(*q1<*q3)
		swap(q1,q3);
	if(*q2<*q3)
		swap(q2,q3);
}
void swap(int *pt1,int *pt2)//将pt1与pt2所指向的变量的值互换
{
	int temp;
	temp=*pt1;
	*pt1=*pt2;
	*pt2=temp;
}
运行结果:


//p169
//用指针变量指向数组元素
#include <iostream>
using namespace std;
int main()
{
	int a[10];
	int i,*p=a;//指针变量p指向数组a的首元素a[0]
	for(i=0;i<10;i++)
		cin>>*(p+i);
	for(p=a;p<(a+10);p++)//p先后指向a[0]~a[9]
		cout<<*p<<" ";
	cout<<endl;
	return 0;
}

运行结果:

//p170
//用指针变量作函数形参接受数组地址
#include <iostream>
using namespace std;
int main()
{
	void select_sort(int *p,int n);//函数声明
	int a[10],i;
	cout<<"Please enter the originl array:"<<endl;
	for(i=0;i<=9;i++)
		cin>>a[i];
	select_sort(a,10);
	cout<<"The sorted array:"<<endl;
	for(i=0;i<=9;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	return 0;
}
void select_sort(int *p,int n)//用指针变量作形参
{
	int i,j;
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<=n-1;j++)
			if(*(p+j)<*(p+i))//用指针法访问数组元素
			{
				int t=*(p+j);
				*(p+j)=*(p+i);
				*(p+i)=t;
			}
	}
}
运行结果:


//p173
//用字符指针指向一个字符串
#include <iostream>
using namespace std;
int main()
{
	char *str="I love CHINA!";
	cout<<str<<endl;
	return 0;
}
运行结果:


//p174
//用字符指针将字符串str1复制给字符串str2
#include <iostream>
using namespace std;
int main()
{
	char str1[]="I love CHINA!",str2[20],*p1,*p2;
	p1=str1;
	p2=str2;
	for(;*p1!='\0';p1++,p2++)
		*p2=*p1;
	*p2='\0';
	p1=str1;
	p2=str2;
	cout<<"str1 is:"<<p1<<endl;
	cout<<"str2 is:"<<p2<<endl;
	return 0;
}
运行结果:


//p176
//用一个指针变量指向函数,然后通过该指针变量调用此函数
#include <iostream>
using namespace std;
int main()
{
	int max(int,int);//函数声明
	int a,b,m;
	int (*p)(int,int);//定义指向函数的指针变量p
	p=max;//使p指向函数max
	cin>>a>>b;
	m=p(a,b);
	cout<<"max="<<m<<endl;
	return 0;
}
int max(int x,int y)
{
	int z;
	z=x>y?x:y;
	return z;
}
运行结果:


//p178
//用指针数组对字符串排序
#include <iostream>
using namespace std;
int main()
{
	void sort(char *name[],int n);//函数声明
	void print(char *name[],int n);//函数声明
	char *name[]={"BASIC","FORTRAN","C++","Pascal","COBOL"};//定义指针数组
	int n=5;
	sort(name,n);
	print(name,n);
	return 0;
}
void sort(char *name[],int n)
{
	char *temp;
	int i,j,k;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<=n-1;j++)
			if(strcmp(name[k],name[j])>0)
				k=j;
		if(k!=i)
		{
			temp=name[i];
			name[i]=name[k];
			name[k]=temp;
		}
	}
}
void print (char *name[],int n)
{
	int i;
	for(i=0;i<n;i++)
		cout<<name[i]<<endl;
}

运行结果:


//p180
//指向指针的指针
#include <iostream>
using namespace std;
int main()
{
	char **p;//定义指向字符指针数据 的指针变量p
	char *name[]={"BASIC","FORTRAN","C++","Pascal","COBLO"};
		p=name+2;
	cout<<*p<<endl;//输出name[2]指向的字符串
	cout<<**p<<endl;//输出name[2]指向的字符串中的第一个字符
	return 0;
}

运行结果:


//p188
//引用的简单使用
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a=10;
	int &b=a;//声明b是a的引用
	a=a*a;//a的值变化了,b的值也应一起变化
	cout<<a<<setw(6)<<b<<endl;
	b=b/5;//b的值变化了,a的值也应一起变化
	cout<<b<<setw(6)<<a<<endl;
	return 0;
}

运行结果:


//p189
//使用指针变量作形参,实现两个变量的互换
#include <iostream>
using namespace std;
int main()
{
	void swap(int *,int *);
	int i=3,j=5;
	swap(&i,&j);//实参是变量的地址
	cout<<i<<" "<<j<<endl;//i和j的值已互换
	return 0;
}
void swap(int *p1,int *p2)//形参是指针变量
{
	int temp;
	temp=*p1;
	*p1=*p2;
	*p2=temp;
}
运行结果:


//p190
//用引用作形参实现两个值的互换
#include <iostream>
using namespace std;
int main()
{
	void swap(int &,int &);
	int i=3,j=5;
	swap(i,j);//实参为整型变量
	cout<<"i="<<i<<"\n"
		<<"j="<<j<<endl;
	return 0;
}
void swap(int &a,int &b)//形参是引用
{
	int temp;
	temp=a;
	a=b;
	b=temp;
}
运行结果:


//p191
//使用引用对三个变量从小到大排序
#include <iostream>
using namespace std;
int main()
{
	void sort(int &,int &,int &);//函数声明,形参是引用
	int a,b,c;
	cout<<"Please enter 3 integers:"<<endl;
	cin>>a>>b>>c;
	sort(a,b,c);//调用sort函数,a,b,c为实参
	cout<<"The sorted order is:"<<endl
		<<a<<" "<<b<<" "<<c<<" "<<endl;
	return 0;
}
void sort(int &i,int &j,int &k)//对i,j,k三个数排序
{
	void change(int &,int &);//函数声明,形参是引用
	if(i>j)
		change(i,j);
	if(j>k)
		change(i,k);
	if(j>k)
		change(j,k);
}
void change(int &x,int &y)//使x和y互换
{
	int temp;
	temp=x;
	x=y;
	y=temp;
}
运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值