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

来源:互联网 发布:sqlserver数据库 编辑:程序博客网 时间:2024/05/17 06:36
//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);//定义指向函数的指针变量pp=max;//使p指向函数maxcin>>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;//定义指向字符指针数据 的指针变量pchar *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;}
运行结果:


原创粉丝点击