一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++中引用的使用總結

C++中引用的使用總結

2021-01-07 14:43C++教程網 C/C++

以下是對C++中引用的使用進行了詳細的總結介紹,需要的朋友可以過來參考下,希望對大家有所幫助

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


C++中引用的使用總結

在程序中,

聲明了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;
}


編輯器報錯
C++中引用的使用總結
========================================

已經申明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;
}


編輯器報錯:

C++中引用的使用總結

注意區分:

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


C++中引用的使用總結

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


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


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


C++中引用的使用總結

在函數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;
    }
}


C++中引用的使用總結

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

使用引用作為形參

復制代碼 代碼如下:

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


C++中引用的使用總結

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

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

復制代碼 代碼如下:

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


C++中引用的使用總結

復制代碼 代碼如下:

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


C++中引用的使用總結

延伸 · 閱讀

精彩推薦
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
主站蜘蛛池模板: 国产三级精品91三级在专区 | 无码人妻少妇色欲AV一区二区 | 91香蕉小视频 | 亚洲 欧美 中文字幕 在线 | 欧美日日操| 色偷偷91久久综合噜噜噜 | 国产欧美一区二区精品性色 | av91在线 | 欧美一区二区三区免费看 | 欧美一区二区三区视视频 | 日韩一卡2卡3卡新区网站 | 免费成年网 | 青草色视频 | 成人午夜影院在线观看 | 青青网| 亚洲图片一区二区三区 | 亚洲是图你懂的 | 动漫肉在线观看 | 精品国产精品人妻久久无码五月天 | 996免费视频国产在线播放 | 胖女性大bbbbbb | 91视频国产在线 | 高清视频一区二区三区 | 日韩欧美一级大片 | 国产精品国色综合久久 | 女人被男人躁得好爽免费视频 | 婷婷中文网 | 国产一级一级一级成人毛片 | 全彩成人18h漫画 | 日韩在线a视频免费播放 | 韩国三级大全 | 99草精品视频 | 特大黑人娇小亚洲女mp4 | 99精品国产综合久久久久 | 秋霞啪啪网 | 日本暖暖在线视频 | 国产日韩免费视频 | japonensis中国东北老人 | 成人毛片高清视频观看 | 久草在线福利视频在线播放 | 久久午夜夜伦痒痒想咳嗽P 久久无码AV亚洲精品色午夜麻豆 |