#include <iostream>
using namespace std;
int main( )
{
int a,b; //定義整型變量a,b
int *pointer_1,*pointer_2; //定義指針變量*pointer_1,*pointer_2
a=100;b=10; //對a,b賦值
pointer_1=&a; //把變量a的地址賦給pointer_1
pointer_2=&b; //把變量a的地址賦給pointer_2
cout<<a<<" "<<b<<endl; //輸出a和b的值
cout<<*pointer_1<<" "<<*pointer_2<<endl; //輸出*pointer_1和*pointer_2的值
return 0;
}
具體一個應用是這樣的:輸出兩個數中,最大與最小值:
#include <iostream>
using namespace std;
int main( )
{
int *p1,*p2,*p,a,b;
cin>>a>>b; //輸入兩個整數
p1=&a; //使p1指向a
p2=&b; //使p2指向b
if(a<b) //如果a<b就使p1與p2的值交換
{
p=p1;p1=p2;p2=p; //將p1的指向與p2的指向交換
}
cout<<"a="<<a<<" b="<<b<<endl;
cout<<"max="<<*p1<<" min="<<*p2<<endl;
return 0;
}
用指針交換了指向。 1.2用指針做為函數的參數: 函數的參數,直接定義成指針,調用時,直接傳入指針
#include <iostream>
using namespace std;
int main( )
{
void swap(int *p1,int *p2); //函數聲明
int *pointer_1,*pointer_2,a,b; //定義指針變量pointer_1,pointer_2,整型變量a,b
cin>>a>>b;
pointer_1=&a; //使pointer_1指向a
pointer_2=&b; //使pointer_2指向b
if(a<b) swap(pointer_1,pointer_2); //如果a<b,使*pointer_1和*pointer_2互換
cout<<"max="<<a<<" min="<<b<<endl; //a已是大數,b是小數
return 0;
}
void swap(int *p1,int *p2) //函數的作用是將*p1的值與*p2的值交換
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
1.3數組與指針 用於排序方面的例子,其實本質上,數組是用指針來實現的特殊變量。
#include <iostream>
using namespace std;
int main( )
{
void select_sort(int *p,int n); //函數聲明
int a[10],i;
cout<<"enter the originl array:"<<endl;
for(i=0;i<10;i++) //輸入10個數
cin>>a[i];
cout<<endl;
select_sort(a,10); //函數調用,數組名作實參
cout<<"the sorted array:"<<endl;
for(i=0;i<10;i++) //輸出10個已排好序的數
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
void select_sort(int *p,int n) //用指針變量作形參
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(*(p+j)<*(p+k)) k=j; //用指針法訪問數組元素
t=*(p+k);
*(p+k)=*(p+i);
*(p+i)=t;
}
}
1.4字符指針字符串
#include <iostream>
using namespace std;
int main( )
{
char *str="I love CHINA!";
cout<<str<<endl;
return 0;
}
1.5函數指針
#include <iostream>
using namespace std;
int main( )
{
int max(int x,int y); //函數聲明
int (*p)(int,int); //定義指向函數的指針變量p
int a,b,m;
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;
if(x>y) z=x;
else z=y;
return(z);
}
可以很方便地實現用不同的情況下,調用不同的函數方法來處理,動態綁定。 1.6 C ++ 引用
#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;
}
引用,通俗的說,就是給變量取了其它的名字,相當於我們中國人有大名和小名一樣,這樣做的好處就是,函數值傳遞時,參數傳遞,只是傳了個地址,直接在原地進行處理,省去了新開辟一個空間的代價,效率提高。 總結: 如果看到形參是指針的函數方法,一定傳遞進去一個地址,用指針或用取變量地址符&,傳遞進去,就可以正確地調用這個函數。 如果是看到形參是引用的函數方法,就直接傳遞變量,來調用這個函數方法。
#include <iostream>
using namespace std;
int main( )
{
void swap(int &,int &);
int i=3,j=5;
swap(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
void swap(int &a,int &b) //形參是引用類型
{
int temp;
temp=a;
a=b;
b=temp;
}
上面這個例子,函數的形參是整數型的引用,調用它時,直接給整數型的變量,就可以正確使用它。