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互聯網輕量級框架整合開發(書籍)閱讀筆記(1):Mybatis和Hibernate概念理解
bat 特定 定義 理解 緩存 面向 ont span 等待 一、關鍵字說明: oop:面向對象 aop:面向切面 ioc:控制反轉 orm:對象關系映射 pojo:數據庫表映射的java實體類 二、常識說明:1.hibernate和mybatis都屬於持久層、orm