#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; }
上面這個例子,函數的形參是整數型的引用,調用它時,直接給整數型的變量,就可以正確使用它。