1. 程式人生 > >C++閱讀筆記(二):引用

C++閱讀筆記(二):引用

引用

一.引用型別

1.引用:即“別名”,即是對某物件的另一個名字。
引用型別由型別識別符號和一個取地址操作符來定義。引用必須被初始化,引用的初始值可以使一個變數或者是另一個引用。

如:float f=10;
float &r1=f;
float &r2=r1;//以上都是正確的。f,r1,r2都指向同一個地址。
float &r3;//error。

引用本身不單獨分配記憶體,與被引用者的物件共享記憶體地址(繫結關係)。
2.引用和被引用物件的值和記憶體地址一樣,操作互相影響;引用和被引用物件的使用相同。
例2-1

#include<iostream.h>
void main()
{
	int i=9;
	int &ir=i;
	cout<<"i="<<i<<"  "<<"ir="<<ir<<endl;
	ir=20;
	cout<<"i="<<i<<"  "<<"ir="<<ir<<endl;
	i=12;
	cout<<"i="<<i<<"  "<<"ir="<<ir<<endl;
	cout<<"i的地址是:"<<&i<<endl;
	cout<<"ir的地址是:"<<&ir<<endl;
}

其結果為:
在這裡插入圖片描述
3.引用被初始後,不可重新賦值。

int i=2,k=3;
int &r=i;
r=&k;//error。
r=k;//OK,r=i=2.

4.可以定義指標變數的引用,但不能定義指向引用的指標。

int f=10;
int *p=&f;
int *&rp=p;//OK,rp是一個引用,它引用的是指標型別。

二.引用與指標

1.定義不同
如下圖:在這裡插入圖片描述
2.使用不同
指標要通過解引用運算子“*”才能訪問所指向記憶體單元的內容,而引用與被引用變數的使用相同,更加簡單。
例2-2

#include<iostream.h>
void main()
{
	int i=9;
	int *pi=&i;
	int &ir=i;
	*pi=2;
	cout<<"i="<<i<<endl;
	ir=8;
	cout<<"i="<<i<<endl;
}

2.指標是一個變數,可以重新賦值,而引用不可以重新賦值。
在這裡插入圖片描述

三.引用引數

1.按值傳遞

#include<iostream.h>
void swap(int m,int n)
{
	int temp;
	temp=m;
	m=n;
	n=temp;
}
void main()
{
	int a=10,b=20;
	cout<<"before swap:"<<"a="<<a<<"  "<<"b="<<b<<endl;
	swap(a,b);
	cout<<"after swap:"<<"a="<<a<<"  "<<"b="<<b<<endl;
}

其值並未換序
在這裡插入圖片描述
函式處理得是拷貝值,形參的改變不會影響實參的值。
傳遞大型的類物件時,需要進行大量的資料複製,效率低。
2.按地址傳遞——引用引數

#include<iostream.h>
void swap(int &m,int &n)
{
	int temp;
	temp=m;
	m=n;
	n=temp;
}
void main()
{
	int a=10,b=20;
	cout<<"before swap:"<<"a="<<a<<"  "<<"b="<<b<<endl;
	swap(a,b);
	cout<<"after swap:"<<"a="<<a<<"  "<<"b="<<b<<endl;
}

其兩數值互換
在這裡插入圖片描述
當引數是引用時,函式接受的是實參的地址,形參的改變影響實參的值。
在函式傳遞一個大型物件時,把引數宣告成引用。

相關推薦

C++閱讀筆記引用

引用 一.引用型別 1.引用:即“別名”,即是對某物件的另一個名字。 引用型別由型別識別符號和一個取地址操作符來定義。引用必須被初始化,引用的初始值可以使一個變數或者是另一個引用。 如:float f=10; float &r1=f; float &a

C++學習筆記開啟檔案、讀取資料、資料定位與資料寫入

1.開啟二進位制檔案(fopen)、讀取資料(fread),應用示例如下: FILE *fp = fopen("data.yuv", "rb+"); //開啟當前目錄中的data.yuv檔案 char *buffer = ( char*) malloc (sizeof(char)*FrameSi

《Unity Manual》閱讀筆記Scripting

找尋Component或者GameObject總結: 找Component: gameObject.GetComponent<RigidBody>() 找子節點中的GameObject:

C++閱讀筆記資料的輸入與輸出

資料的輸入與輸出 一.流的概念(stream) 定義:從源裝置到目標裝置的字元序列。 輸入流:指從輸入裝置流向記憶體的位元組序列(input stream)。 輸出流:指從記憶體流向輸出裝置的位元組序列(output stream)。 表示:cin:輸入流,co

C++學習筆記類和物件

類是物件共性的抽象,一種自定義的資料型別,可認為是C語言中結構體的拓展。它的作用是將資料和演算法(資料操作)封裝在使用者自定義的抽象資料型別中。 為什麼要在C++中新增類這樣一種“工具“呢? 程式中的每一組資料都是為某一種操作而準備的。而資料的交叉使用容易導致資料被誤操作,

安卓開發學習筆記Android Stuidio無法引用Intent來創建對象,出現cannot resolve xxx

編譯器 port stact 消失 click first 紅色 xxx font 筆者在進行安卓開發時,發現自己的代碼語法完全沒有問題。尤其是創建intent對象的時候,語法完全是正確的,但是Android Stuidio卻顯示報錯,Intent類顯示為紅色,如圖所示:

《好好學習》閱讀筆記第一章什麼是臨界知識

第一章 [----什麼是[臨界知識]] 目錄 自序 學習的三個目標: 1.解釋問題[----看清問題本質] 2.解決問題[----根據問題關鍵提出解決方案,最好有備用方案] 3.預測問題[----找到基本規律,預測未來走向]

C#語言學習筆記變量、數據類型和運算符

tex ear 布爾值 全部 exchange result 轉換成 lis int 變量、數據類型 給變量賦值,如果想指定float,在數字後面加上F/f;如果想指定decimal,在數字後面加上m。 0-9:48-57 A-Z:65-90 a-

《HTTP權威指南》--閱讀筆記

cep ask 資源 phrase 格式 tel 位置 自動擴展 port URL的三部分: 1,方案 scheme 2,服務器位置 3,資源路徑 URL語法: <scheme>://<user>:<password>@&

javascript學習筆記定義函數、調用函數、參數、返回值、局部和全局變量

兩個 cnblogs bsp 結果 value ava ase com 調用 定義函數、調用函數、參數、返回值 關鍵字function定義函數,格式如下: function 函數名(){ 函數體 } 調用函數、參數、返回值的規則和c語言規則類似。 1 <!DOC

CSS學習筆記特性

code 背景色 左移 line tex lin 安裝 其中 cas 一、顏色特性 1. 前景色:color 用種方式指定前景色,3種方式分別是rgb顏色,#16進制編碼,顏色名稱: color: rgb(100,100,100); color: #ee3e80; col

JS筆記隱式轉換

-1 筆記 總結 img 轉換 隱式轉換 基礎 blog com 最近剛開始復習JS的基礎知識,看到隱式轉換這一塊,發現它的規則很多,紅寶書上列出的框框又有些冗雜,所以這裏我借一個式子總結一下其中的規律以及一些有趣的現象。 JS筆記(二):隱式轉換

大型站點技術架構PDF閱讀筆記

coo fun function end 關系 spl 閱讀 each 數據庫 1、數據庫讀寫分離: 2、系統吞吐量和系統並發數以及系統響應時間之間的關系: 3、系統負載的概念: 4、反向代理的概念: 5、使用緩存來讀取數據:

Unity3D之Mecanim動畫系統學習筆記模型導入

leg character ... sdk ocs 物體 mat 版本 sset 我們要在Unity3D中使用上模型和動畫,需要經過下面幾個階段的制作,下面以一個人形的模型開發為準來介紹。 模型制作 模型建模(Modelling) 我們的美術在建模時一般會制作一個稱為

C++學習筆記——交換函數swap

pos 變量 col 值傳遞 一段 turn 如何選擇 ret 原因 這次我們要透過一個簡單的函數swap深入理解函數傳參的本質以及在C++中如何選擇傳參方式。 先來看第一段程序: void swap(int x, int y) { int temp = y;

kubernetes學習筆記bashborad安裝配置

tag log struct recommend ide col create part describe 官方推薦方法: 連接:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashb

大型站點技術架構閱讀筆記

UC link style views body HR markdown img tle 1、 2、 3、 4、 5、 6、 7、

python3學習筆記Python初識

區別 說明 from 學習筆記 情況 不能 col 需要 學習 一、算法 在開始認真地編程之前,首先來解釋下什麽是計算機程序設計。簡單地說,它就是告訴計算機要做什麽。計算機可以做很多事情,但是它不會自己思考,需要我們告訴它具體細節,並且使用計算機能夠理解的語言把算法告

Linux學習筆記實戰-根據微服務端口號關閉進程

java 地方 img linux學習 區分 殺死進程 項目組 cannot home 前言 現在項目組基本都用Springboot,每個服務占用一個端口號,有時需要選擇性的關閉,但在任務管理器上他們的名稱都是java.exe,無法區分,這才學以致用。 killPort.s

JavaEE互聯網輕量級框架整合開發書籍閱讀筆記1Mybatis和Hibernate概念理解

bat 特定 定義 理解 緩存 面向 ont span 等待 一、關鍵字說明: oop:面向對象 aop:面向切面 ioc:控制反轉 orm:對象關系映射 pojo:數據庫表映射的java實體類 二、常識說明:1.hibernate和mybatis都屬於持久層、orm