程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++基礎知識總結--指針

C++基礎知識總結--指針

編輯:C++入門知識

C++基礎知識總結--指針


記憶C++的語法很難,光記憶語法也沒有用,不如在簡單的代碼中,體味C++的語法,用實戰方式,學習和鞏固這些知識。無論有多難的程序,也是由簡單的程序組成的,所以,基礎知識牢固,才能做出成績,本著此想法,開始寫這篇文章。  一有關指針的基礎知識  1.1定義,代碼這樣實現的:  
#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;
}

 

   上面這個例子,函數的形參是整數型的引用,調用它時,直接給整數型的變量,就可以正確使用它。       

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved