c++中引用的作用

引用的基本語法

  1. 用途起別名

  2. Type &別名=原名

  3. 引用必須初始化

  4. 一旦初始化后,不能修改

  5. 對數組建立引用

     #include<iostream>using namespace std;//1.引用基本語法 Type &別名=原名void test01(){int a = 10;int &b = a;cout << "a=" << a << endl;cout << "b=" << b << endl;}//2.引用必須初始化void test02(){//int &a;  必須初始化int a = 10;int &b = a; //引用初始化后不可修改int c = 20;b = c;		//這個不叫初始化叫賦值cout << "b=" <<b<< endl;}//3.對數組建立引用void test03(){int arr[10];for (int i = 0; i < 10; i++){arr[i] = i;}//給數組起別名int(&pArr)[10] = arr;for (int i = 0; i < 10; i++){cout << pArr[i] << " ";}cout << endl;//第二種方式起別名typedef int(ARRAYREF)[10];//一個具有10元素的int類型的數組ARRAYREF & pArr2 = arr;for (int i = 0; i < 10; i++){cout << pArr2[i] << " ";}cout << endl;}int main(){//test01();//test02();test03();system("pause");return 0;}
    

參數3種傳遞方式

  1. 值傳遞

  2. 地址傳遞

  3. 引用傳遞

     #include<iostream>using namespace std;void mySwap(int a, int b){int tmp = a;a = b;b = tmp;cout << "mySwap::a= " << a << endl;cout << "mySwap::b= " << b << endl;}void test01(){int a = 10;int b = 10;mySwap(a, b);	//值傳遞cout << "a= " << a << endl;cout << "b= " << b << endl;}//地址傳遞void mySwap2(int *a,int *b){int tmp = *a;*a = *b;*b = tmp;}void test02(){int a = 10;int b = 20;mySwap2(&a, &b);	//地址傳遞cout << "a= " << a << endl;cout << "b= " << b << endl;}//引用傳遞  類似傳地址void mySwap3(int &a, int &b)//&a=a{int tmp = a;a = b;b = tmp;}void test03(){int a = 10;int b = 20;mySwap3(a, b);	//值傳遞cout << "a= " << a << endl;cout << "b= " << b << endl;}//引用的注意事項//1.引用必須引用一塊合法的內存空間//2.不要返回局部變量的引用//3.不能有NULL引用,必須是合法內存空間//4.必須在聲明引用變量時進行初始化int &doWork(){int a = 10;	//a為局部變量,引用接受返回值,應該亂碼return a;}void test04(){//int &a = 10;引用必須引用一塊合法的內存空間int &ret = doWork();cout << "ret= " << ret << endl;//第一次10是編譯器做了優化//如果多次打印就不行cout << "ret= " << ret << endl;cout << "ret= " << ret << endl;cout << "ret= " << ret << endl;}int &doWork02(){static int a = 10;return a;}void test05(){int& ret = doWork02();//如果函數的返回值是引用,那么這個函數調用可以作為左值doWork02() = 1000;//相當于a=1000cout << "ret= " << ret << endl;cout << "ret= " << ret << endl;cout << "ret= " << ret << endl;cout << "ret= " << ret << endl;}int main(){//test01();//test02();//test03();//test04();test05();system("pause");return 0;}
    

注意事項:

  1. 不要返回局部變量的引用
  2. 如果函數返回值是引用,那么函數的調用可以作為左值
  3. 引用的本質就是一個指針常量

指針的引用

用一級指針引用可以代替二級指針

常量引用

  1. 使用場景,修飾形參為只讀,尤其是拷貝構造函數
  2. const int &a=10;會分配內存
  3. 引用不產生新的變量,減少形參與實參傳遞時的開銷
  4. 由于引用可能導致實參隨形參改變而改變,將其定義為常量引用可以消除這種副作用
  5. 如果希望實參隨著形參改變而改變,那么使用一般的引用,如果不希望實參隨著形參改變,那么使用常引用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383334.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LVM (Logic Volume Management,邏輯卷管理)

是傳統商業Unix就帶有的一項高級磁盤管理工具&#xff0c;異常強大。后來LVM移植到了Linux操作系統上&#xff0c;盡管不像原來Unix版本那么強大&#xff0c;但瘦死的駱駝比馬大&#xff0c;Linux的LVM仍然非常強大&#xff0c;可以在生產運行系統上面直接在線擴展硬盤分區&…

cpu中的MMU的作用

虛擬內存與物理內存之間的映射 用戶空間映射到物理內存是獨立的&#xff0c;提高安全性修改內存訪問級別 &#xff08;0是最高級&#xff09;

Linux命令行與Shell腳本編程大全讀書筆記

Linux內核4大主要功能&#xff1a; 內存管理 進程管理 設備管理 文件系統管理 Linux系統啟動的進程和腳本管理 1./etc/inittab 管理系統開機時會自動啟動的進程 2./etc/init.d 管理開機時啟動或停止某個應用的腳本放在這個目錄下&#xff0c;/etc/rcX.d目錄在啟動時&…

拷貝構造函數的總結

構造函數的分類及調用 按照參數分類 1.無參構造&#xff08;默認構造&#xff09; 2.有參構造按照類型分類 1.普通構造函數2.拷貝構造函數無參構造寫法和調用 Person p1; 注意不能寫Person (),因為編譯器認為這個是函數聲明有參構造函數寫法 和調用 Person p2(10) 或者Per…

技術與技巧札記

Linux常用命令及技巧&#xff1a; &#xff08;1&#xff09;cat /proc/version 查看當前內核的版本 (2) 掛載nfs文件夾&#xff1a;需要先確認在&#xff0f;etc&#xff0f;exports文件&#xff0c;可以用于開發板掛載的文件夾 mount -o nolock 10.0.22.30:/root/sharednfs …

c++中new的總結(動態管理,malloc存在的問題,malloc與new的區別)

c中使用malloc出現的問題 程序員必須確定對象的長度malloc 返回一個&#xff08;void *&#xff09;指針 &#xff0c;c不允許將&#xff08;void*) 賦值給其它指針&#xff0c;必須強轉malloc可能申請內存失敗&#xff0c;所以必須判斷返回值來保存內存分配成功用戶在使用對象…

Linux中變量#,@,0,1,2,*,$$,$?的含義

$# 是傳給腳本的參數個數 $0 是腳本本身的名字 $1 是傳遞給該shell腳本的第一個參數 $2 是傳遞給該shell腳本的第二個參數 $ 是傳給腳本的所有參數的列表 $* 是以一個單字符串顯示所有向腳本傳遞的參數&#xff0c;與位置變量不同&#xff0c;參數可超過9個 $$ 是腳本運行的當前…

Volatile的陷阱

最近寫的關于在嵌入式開發中常遇到的關于volatile關鍵字使用的短文&#xff0c;都是些通用的技術&#xff0c;貼上來share。 對于volatile關鍵字&#xff0c;大部分的C語言教材都是一筆帶過&#xff0c;并沒有做太過深入的分析&#xff0c;所以這里簡單整理了一些關于volatile的…

c++中靜態成員變量和靜態成員函數

靜態成員變量 在一個類中&#xff0c;若將一個成員變量聲明為static,這種成員成為靜態成員變量&#xff0c;與一般的數據成員不同&#xff0c;無論建立了多少個對象&#xff0c;都只想有一個靜態數據的拷貝&#xff0c;靜態成員變量&#xff0c;屬于某個類&#xff0c;所有對象…

單列模式(餓漢)

單例模式案例 目的&#xff1a;為了讓類中只有一個實例&#xff0c;實例不需要自己釋放將 默認構造 和 拷貝構造 私有化內部維護一個 對象的指針私有化唯一指針對外提供getinstance方法來訪問這個指針保證類中只能實例化唯一 一個對象 主席案例 #include<iostream>usin…

Makefile札記

Makefile中: ? 的區別 在Makefile中我們經常看到 : ? 這幾個賦值運算符&#xff0c;那么他們有什么區別呢&#xff1f;我們來做個簡單的實驗 新建一個Makefile&#xff0c;內容為&#xff1a; ifdef DEFINE_VRE VRE “Hello World!” else endif ifeq ($(OPT),define) VRE…

c++中this指針基本概念和使用

class Person { public:int m_A;//非靜態成員變量&#xff0c;屬于對象上void func(/*Person * this*/){}; //非靜態成員函數 不屬于對象身上static int m_B;//靜態成員函數&#xff0c;不屬于對象上static void fun2(){};//靜態成員函數 &#xff0c;不屬于對象身上//double …

通用Makefile實現

Makefile是Linux下程序開發的自動化編譯工具&#xff0c;一個好的Makefile應該準確的識別編譯目標與源文件的依賴關系&#xff0c;并且有著高效的編譯效率&#xff0c;即每次重新make時只需要處理那些修改過的文件即可。Makefile擁有很多復雜的功能&#xff0c;這里不可能也沒必…

c++中空指針訪問成員函數

如果成員函數沒有用到this &#xff0c;那么空指針可以直接訪問 如果成員函數用到this 指針&#xff0c;就要注意&#xff0c;要判斷是否為空&#xff0c;防止程序崩潰 #include<iostream>using namespace std;class Person{public:void show(){//沒有 用到this指針&am…

從0開始python學習-35.allure報告企業定制

目錄 1. 搭建allure環境 2. 生成報告 3. logo定制 4. 企業級報告內容或層級定制 5. allure局域網查看 1. 搭建allure環境 1.1 JDK&#xff0c;使用PyCharm 找到pycharm安裝目錄找到java.exe記下jbr目錄的完整路徑&#xff0c;eg: C:\Program Files\JetBrains\PyCharm Com…

grep 常用命令

這個--include選項,可以這樣使用: grep -rn --include*.c --include*.h re . 可以指定多次, 如果真是上面的這種情況, 其實可以用 grep -rn --include*.[ch] re . 但是, 如果源文件中含有C源代碼,上面的方法就不湊效了, 因為[]中只能放一個字符. grep -rn --include*.{cp…

c++中友元函數詳解

友元 友元分為&#xff1a;友元函數和友元類 友元提供了一種突破封裝的方式&#xff0c;有時提供了便利。但是友元會增加耦合度&#xff0c;破壞了封裝&#xff0c;所以友元不宜多 用。 全局函數做友元函數 全局函數寫到類中做聲明 并且最前面寫關鍵字 friend 友元函數可訪問…

Linux時間函數札記

關于gmtime、gmtime_r、localtime、localtime_r 測試環境&#xff1a;vmware 7 Redhat5.5&#xff0c;系統時間使用UTC&#xff0c;時區為上海。 1、函數功能介紹 使用man gmtime或man localtime都可以的得到這幾個函數的介紹。原型如下&#xff1a; struct tm *gmtime(const …

c++實現順序表的相關操作

Myarray.h文件 #pragma once#include<iostream>using namespace std;class MyArray { public:MyArray();//默認構造 默認100容量MyArray(int capacity);MyArray(const MyArray& array);~MyArray();//尾插法void Push_Back(int val);//根據索引獲取值int getData(int…

系統架構札記

什么是高內聚、低耦合&#xff1f; 起因&#xff1a;模塊獨立性指每個模塊只完成系統要求的獨立子功能&#xff0c;并且與其他模塊的聯系最少且接口簡單&#xff0c;兩個定性的度量標準――耦合性和內聚性。 耦合性也稱塊間聯系。指軟件系統結構中各模塊間相互聯系緊密程度的一…