//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;
}
运行结果: