亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中引用的使用總結

2020-01-26 15:43:58
字體:
來源:轉載
供稿:網友

1引用的定義

引用時C++對C的一個重要的擴充,引用的作用是給變量起一個別名。

例如:

int a;

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

經過以上的聲明,b就成為了a的別名,a和b的地位以及作用都是一樣的。

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

復制代碼 代碼如下:

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


在程序中,

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

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

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

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

聲明引用,而不進行初始化操作:

復制代碼 代碼如下:

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

編輯器報錯

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

已經申明p為a的引用之后,在聲明p為b的引用

復制代碼 代碼如下:

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

編輯器報錯:


注意區分:

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

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

引用不是一種獨立的數據類型,必須指定其代表的某一類實體(如變量,類對象),不能定義引用數組,不能定義指向引用的指針,也不能定義指針的引用。

2 引用作為函數的參數

C++增加引用機制,主要是把它作為函數參數,以擴充函數傳遞數據的功能。

函數的參數傳遞有三種情況

將變量名作為形參和實參

這是傳給形參的是變量的值,傳遞是單向的。如果在執行被調用函數期間,形參的值發生變化,是不能反映到實參的。因為形參只是復制了實參的數值,兩變量并不是占用同一存儲單元。

復制代碼 代碼如下:

#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復制了i的值,y復制了j的值。但i和j與x和y占不同的存儲單元,因此只改變x和y的值,并不能改變i和j的值。

將變量地址作為實參,指針作為形參

這種方式仍然是值傳遞的方式,不過他傳遞的不是變量的數值,而是變量的地址。因此可以在被調用函數中,通過調用指針指向的變量來改變相應變量的值。

復制代碼 代碼如下:

#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;
}



因為是值傳遞,所以只改變指針的值,而不去改變指向的變量的值,還是不能改變相應的變量的值。

復制代碼 代碼如下:

#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;
}


當改變指針指向的變量的值的時候,相應的變量的數值也會發生變化。

將變量名作為實參,引用作為形參

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

復制代碼 代碼如下:

#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;
}



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

引用作為形參與指針變量作為形參的區別

1使用引用類型,就不必在swap函數中聲明形參是指針變量。指針變量要另外開辟內存單元,其內容是地址。而引用不是一個獨立的變量,不單獨占內存單元,引用的數據類型應該應該與實參相同。

2 在main函數中,實參不必用變量的地址,而是直接用變量名。系統向形參傳遞的是實參的地址而不是實參的值。

3 由于不能聲明指針的引用,那我們如何像指針那樣傳遞可以通過傳遞數組的首元素來實現傳遞整個數組的數據呢?

使用指針作為形參:

復制代碼 代碼如下:

#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;
    }
}


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

使用引用作為形參

復制代碼 代碼如下:

#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;
    }
}


因為引用就是給原來的變量起了別名,并且不能聲明指針的引用,所以我們就聲明指針指向的變量的引用,然后再對引用取地址,就達到了這個目的。

為了更清楚的說明,下面再舉一個例子:

復制代碼 代碼如下:

#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;
}


復制代碼 代碼如下:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av成人在线观看| 成人做爰www免费看视频网站| 尤物99国产成人精品视频| 亚洲精品久久久久久久久久久久| 国模gogo一区二区大胆私拍| 4388成人网| 日韩高清电影好看的电视剧电影| 68精品国产免费久久久久久婷婷| 国精产品一区一区三区有限在线| 成人激情视频在线播放| 97久久精品人人澡人人爽缅北| 亚洲精品久久久久久久久久久久久| 久久躁狠狠躁夜夜爽| 91精品久久久久久久久久入口| 色久欧美在线视频观看| 色综合视频一区中文字幕| yw.139尤物在线精品视频| 茄子视频成人在线| 日韩最新中文字幕电影免费看| 亚洲欧美激情四射在线日| 日韩亚洲第一页| 欧美日韩国产在线看| 最近2019中文字幕mv免费看| 亚洲国产精品高清久久久| 欧美日韩国产中文字幕| 亚洲999一在线观看www| 一本一本久久a久久精品综合小说| 麻豆一区二区在线观看| 日韩电影免费观看在线观看| 在线看欧美日韩| 国产黑人绿帽在线第一区| 国产97色在线| 国产精品免费看久久久香蕉| 日韩中文字幕网址| 日韩中文字幕国产精品| 亚洲国产精品大全| 2019精品视频| 国产精品91久久久久久| 欧美日韩亚洲天堂| 国产深夜精品福利| 国产精品福利片| 亚洲色图av在线| 91沈先生在线观看| 亚洲第一区第一页| 欧美日韩一区二区三区| 久热精品视频在线| 5566成人精品视频免费| 国产精品高潮呻吟视频| www日韩欧美| 国产精品久久久久久超碰| 国产精品999| 亚洲老板91色精品久久| 亚洲片国产一区一级在线观看| 成人免费高清完整版在线观看| 5278欧美一区二区三区| 亚洲白虎美女被爆操| 国产视频久久久| 国产亚洲精品久久| 亚洲精品久久久久中文字幕欢迎你| 国产精品视频一区国模私拍| 欧美激情2020午夜免费观看| 日韩美女av在线| 日本一区二三区好的精华液| 亚洲欧洲一区二区三区久久| 欧美一级片久久久久久久| 日韩精品免费看| 国产精品入口免费视| 中文字幕久精品免费视频| 亚洲欧美自拍一区| 91色琪琪电影亚洲精品久久| 久久久亚洲国产天美传媒修理工| 亚洲精品福利在线| 国产精品亚洲综合天堂夜夜| 久久精品视频免费播放| 精品高清美女精品国产区| 亚洲欧美国产高清va在线播| 欧美亚洲另类在线| 日本成人黄色片| www.日本久久久久com.| 精品福利一区二区| 97在线日本国产| 国产精品美腿一区在线看| 九九热精品视频在线播放| 韩国美女主播一区| 亚洲精品综合精品自拍| 日韩av在线影院| 国产精品精品国产| 成人国产亚洲精品a区天堂华泰| 色婷婷av一区二区三区在线观看| 亚洲一区亚洲二区| 91免费看片在线| 欧美成人精品一区二区三区| 国产一区红桃视频| 欧美成人亚洲成人日韩成人| 国产精品女视频| 欧美在线一级va免费观看| 亚洲第一综合天堂另类专| 欧美性猛交xxxx| 精品一区二区三区四区| 精品无人国产偷自产在线| 日本道色综合久久影院| 国产精品一区久久| 久久国产精品网站| 欧美亚洲国产视频| 韩国精品美女www爽爽爽视频| 精品动漫一区二区| 日本精品性网站在线观看| 亚洲欧洲一区二区三区在线观看| 亚洲女同精品视频| 国产精品免费在线免费| 欧美精品精品精品精品免费| 国产91成人video| 亚洲免费av电影| 久久99国产精品久久久久久久久| 中文字幕亚洲欧美| 精品伊人久久97| 国产欧美在线看| 日韩高清av一区二区三区| 国产精品亚洲激情| 亚洲国产日韩欧美综合久久| 久久夜精品va视频免费观看| 精品香蕉在线观看视频一| 一本一本久久a久久精品综合小说| 久久久久久久影视| 亚洲精品视频在线播放| 日韩中文字在线| www.精品av.com| 亚洲精品自拍第一页| 精品国产老师黑色丝袜高跟鞋| 亚洲国内精品在线| 欧美日韩成人精品| 欧美激情2020午夜免费观看| 欧美性猛交xxxx免费看漫画| 另类图片亚洲另类| 国产mv免费观看入口亚洲| 欧美日韩国产页| 欧美在线视频导航| 国产成人综合av| 7777免费精品视频| 国产精品www网站| 欧美日韩午夜视频在线观看| 国产精品网红直播| www.日韩.com| 亚洲影院在线看| 亚洲人a成www在线影院| 日韩精品在线私人| 国内精品久久久久影院优| 日韩国产在线看| 亚洲国产私拍精品国模在线观看| 日韩一区二区三区xxxx| 亚洲欧美日韩中文在线| 亚洲电影第1页| 18一19gay欧美视频网站| 亚洲国产精品人人爽夜夜爽| 久久免费视频在线| 久久视频精品在线| 日韩av片永久免费网站| 91人人爽人人爽人人精88v| 91sa在线看| 国产精品久久久久久久av电影| 日韩欧美中文字幕在线播放| 亚洲人成亚洲人成在线观看| 国产精品成人在线| 国产在线视频欧美|