亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中引用的使用總結(jié)

 更新時(shí)間:2013年10月16日 10:26:31   作者:  
以下是對(duì)C++中引用的使用進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助

1引用的定義

引用時(shí)C++對(duì)C的一個(gè)重要的擴(kuò)充,引用的作用是給變量起一個(gè)別名。

例如:

int a;

int &b=a;//聲明b是a的引用

經(jīng)過(guò)以上的聲明,b就成為了a的別名,a和b的地位以及作用都是一樣的。

將b聲明為a的引用,不需要再為b開(kāi)辟新的單元,b和a在內(nèi)存中占同一存儲(chǔ)單元,它們具有相同的地址。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int a=10;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &b=a;//聲明b是a的引用
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout<<"b="<<b<<endl;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a=a-5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout<<"b="<<b<<endl;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b=b-1;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout<<"a="<<a<<endl; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 0;
}


在程序中,

聲明了b是a的引用,然后輸出b=10;

然后使a的值減小5,再輸出b=5,說(shuō)明b會(huì)隨著a的變化做出變化;

然后使b的值減小1,再輸出a=4,說(shuō)明a會(huì)隨著b的變化做出變化。

在聲明一個(gè)引用的同時(shí),必須同時(shí)對(duì)它進(jìn)行初始化,即聲明它代表哪一個(gè)變量。在聲明變量b是變量a的引用后,就可以將b作為a的別名來(lái)進(jìn)行操作,并且b不能再作為其他變量的引用(別名)。

聲明引用,而不進(jìn)行初始化操作:

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
         int a=10;
         int &b;             
         return 0;
}

編輯器報(bào)錯(cuò)

========================================

已經(jīng)申明p為a的引用之后,在聲明p為b的引用

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
         int a=10;
         int &p=a;
   int b=5;
   int &p=b;             
         return 0;
}

編輯器報(bào)錯(cuò):


注意區(qū)分:

int &b=a;表示b是a的引用

int *b=&a;表示b是指針變量,并且b的值是a的地址

引用不是一種獨(dú)立的數(shù)據(jù)類(lèi)型,必須指定其代表的某一類(lèi)實(shí)體(如變量,類(lèi)對(duì)象),不能定義引用數(shù)組,不能定義指向引用的指針,也不能定義指針的引用。

2 引用作為函數(shù)的參數(shù)

C++增加引用機(jī)制,主要是把它作為函數(shù)參數(shù),以擴(kuò)充函數(shù)傳遞數(shù)據(jù)的功能。

函數(shù)的參數(shù)傳遞有三種情況

將變量名作為形參和實(shí)參

這是傳給形參的是變量的值,傳遞是單向的。如果在執(zhí)行被調(diào)用函數(shù)期間,形參的值發(fā)生變化,是不能反映到實(shí)參的。因?yàn)樾螀⒅皇菑?fù)制了實(shí)參的數(shù)值,兩變量并不是占用同一存儲(chǔ)單元。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 void change(int x,int y);
 int i=3,j=2;
 change(i,j);
 cout<<i<<endl;
 cout<<j<<endl;
 return 0;
}
void change(int x,int y){
    int z;
    z=x;
    x=y;
    y=z;
}



x復(fù)制了i的值,y復(fù)制了j的值。但i和j與x和y占不同的存儲(chǔ)單元,因此只改變x和y的值,并不能改變i和j的值。

將變量地址作為實(shí)參,指針作為形參

這種方式仍然是值傳遞的方式,不過(guò)他傳遞的不是變量的數(shù)值,而是變量的地址。因此可以在被調(diào)用函數(shù)中,通過(guò)調(diào)用指針指向的變量來(lái)改變相應(yīng)變量的值。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
         void change(int * x,int * y);
         int i=3,j=2;
         change(&i,&j);
         cout<<i<<endl;
         cout<<j<<endl;
         return 0;
}
void change(int * x,int * y){
         int *z;
         z=x;
         x=y;
         y=z;
}



因?yàn)槭侵祩鬟f,所以只改變指針的值,而不去改變指向的變量的值,還是不能改變相應(yīng)的變量的值。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
         void change(int * x,int * y);
         int i=3,j=2;
         change(&i,&j);
         cout<<i<<endl;
         cout<<j<<endl;
         return 0;
}
void change(int * x,int * y){
         int *z;
         *z=*x;
         *x=*y;
         *y=*z;
}


當(dāng)改變指針指向的變量的值的時(shí)候,相應(yīng)的變量的數(shù)值也會(huì)發(fā)生變化。

將變量名作為實(shí)參,引用作為形參

將變量名作為形參和實(shí)參和將變量地址作為實(shí)參,指針作為形參都是采用的值傳遞的方式。而引用作為形參的時(shí)候,采用的是地址傳遞的方式。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 void change(int & x,int & y);
 int i=3,j=2;
 change(i,j);
 cout<<i<<endl;
 cout<<j<<endl;
 return 0;
}
void change(int & x,int & y){
  int z;
  z=x;
  x=y;
  y=z;
}



在函數(shù)change的形參中聲明了a,b是整形變量的引用。當(dāng)main函數(shù)調(diào)用change函數(shù)時(shí),把實(shí)參i的地址傳遞給形參x,把實(shí)參j的地址傳遞給形參y,從而使i和x共享同一個(gè)單元,使j和y共享同一個(gè)單元。也可以理解成,把i的變量名傳遞給了x,把j的變量名傳遞給了y。

引用作為形參與指針變量作為形參的區(qū)別

1使用引用類(lèi)型,就不必在swap函數(shù)中聲明形參是指針變量。指針變量要另外開(kāi)辟內(nèi)存單元,其內(nèi)容是地址。而引用不是一個(gè)獨(dú)立的變量,不單獨(dú)占內(nèi)存單元,引用的數(shù)據(jù)類(lèi)型應(yīng)該應(yīng)該與實(shí)參相同。

2 在main函數(shù)中,實(shí)參不必用變量的地址,而是直接用變量名。系統(tǒng)向形參傳遞的是實(shí)參的地址而不是實(shí)參的值。

3 由于不能聲明指針的引用,那我們?nèi)绾蜗裰羔樐菢觽鬟f可以通過(guò)傳遞數(shù)組的首元素來(lái)實(shí)現(xiàn)傳遞整個(gè)數(shù)組的數(shù)據(jù)呢?

使用指針作為形參:

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
void Print(int *p,int n);
    int a[5]={1,2,3,4,5};
    Print(a,5);
    return 0;
}
void Print(int *p,int n){
    int i;
    for(i=0;i<n;i++){
     cout<<p[i]<<endl;
    }
}


======================================================

使用引用作為形參

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
void Print(int &p,int n);
    int a[5]={1,2,3,4,5};
    Print(a[0],5);
    return 0;
}
void Print(int &p,int n){
    int i;
    int *a=&p;
    for(i=0;i<n;i++){
       cout<<a[i]<<endl;
    }
}


因?yàn)橐镁褪墙o原來(lái)的變量起了別名,并且不能聲明指針的引用,所以我們就聲明指針指向的變量的引用,然后再對(duì)引用取地址,就達(dá)到了這個(gè)目的。

為了更清楚的說(shuō)明,下面再舉一個(gè)例子:

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
   int i=10;
   int *p;
   p=&i;//將i的地址賦給指針p
   int &y=*p;//將y作為指針p指向的變量的引用
   cout<<y<<endl;
   if(&y==p)cout<<"succeed"<<endl;//檢查y的地址和指針p的值是否相等
   return 0;
}


復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
   int a[5]={1,2,3,4,5};
   int &y=a[0];//聲明y作為數(shù)組的首元素的引用
   int *p=&y;//將y的地址賦給指針p
   int i=0;
   for(;i<5;i++){
      cout<<p[i]<<endl;
   }
   return 0;
}

相關(guān)文章

最新評(píng)論