C++ 中引用與指針的區(qū)別實例詳解
C++ 中引用與指針的區(qū)別實例詳解
引用是從C++才引入的,在C中不存在。為了搞清楚引用的概念,得先搞明白變量的定義及引用與變量的區(qū)別,變量的要素一共有兩個:名稱與空間。
引用不是變量,它僅僅是變量的別名,沒有自己獨立的空間,它只符合變量的“名稱”這個要素,而“空間”這個要素并不滿足。換句話說,引用需要與它所引用的變量共享同一個內(nèi)存空間,對引用所做的改變實際上是對所引用的變量做出修改。并且引用在定義的時候就必須被初始化。
參數(shù)傳遞的類型及相關要點:
1 按值傳遞:形參不能修改實參的值,實參要初始化形參,需要分配空間,然后將實參內(nèi)容copy至形參中。
2 引用傳遞:實參初始化形參時不需要分配空間。
3 指針傳遞:本質還是按值傳遞,在實參初始化形參時,還是需要分配空間的。如果需要修改指針的地址,單純用指針傳遞也是不行的,必須用**或*&
下面討論引用的相關內(nèi)容:
1 引用的概念
2 const引用
3 引用作為參數(shù)傳遞
4 引用作為函數(shù)返回值
5 引用與指針的區(qū)別
1 引用的概念
牢記下面這幾個要點即可:
(1)引用是變量的別名,沒有獨立的空間
(2) 引用需要與它引用的變量共享共間
(3) 對引用所做的改變實際上是對它所引用的變量做出改變
(4) 引用在定義的時候需要進行初始化
(5) 引用一經(jīng)初始化不能重新引用其它變量。
見如下范例:
int main(void) { int val = 100; //int &refval;<span style="white-space:pre"> </span>//Error,引用必須初始化 int &refval = val; cout << "val="<< val << endl; refval = 200; <span style="white-space:pre"> </span>//實際對val變量進行了改變 cout << "val=" << val << endl; int val2 = 500; refval = val2; <span style="white-space:pre"> </span>//這不代表對refval引用至val2這個變量, //僅僅代表將val2賦值給refval,即val. cout << "val=" << val << endl; return 0; }
2 const引用
const引用要點如下:
(1) 顧名思義,const引用是指向const對象的引用.
(2) const引用可以引用非const對象,但非const引用不能引用const對象??梢砸娤旅娴暮瘮?shù)例子.
int a = 200; const int &ref = a; //OK const int b = 100; int &ref2 = b; //Error,
(3) const引用的對象值是常量,不能修改。
const int a = 200; const int &ref = a; ref = 100; //Error,引用的對象是常量,不能被修改
(4) const引用可以引用不同類型的變量,但是將產(chǎn)生一個臨時變量。如下:
double a = 3.14; const int &ref = a; //OK,它產(chǎn)生的過程是: //int tmp = a; 生成臨時變量tmp,數(shù)據(jù)可能被截短。 //const int &ref = tmp;引用的實際上是臨時變量
3 引用作為參數(shù)傳遞
引用作為參數(shù)傳遞是參數(shù)傳遞的其中一種。它在實參初始化形參時不需要分配內(nèi)存空間,下面是例子:
void swap(int &a, int &b ) { int tmp = a; a = b; b = tmp; } int main() { int x = 20; int y = 30; swap( x, y ); cout << x << endl; //x = 30; cout << y << endl; //y = 20; }
4 引用作為函數(shù)返回值
先列出范例,如下:
int a[] = {1,2,3,4,5,6,7,8,9,0}; int &index(int i) { return a[i]; } int main() { index(3) = 100; cout << a[3] << endl; //output: 100 }
這是引用的另一個作用,可以將函數(shù)放在賦值運算符的左邊。index函數(shù)返回a[]的引用,對引用所做的改變將修改變量自身,所以a[3]被修改成100.
5 引用與指針的區(qū)別
(1)訪問引用是直接訪問,訪問指針是間接訪問。
(2)引用是變量的別名,本身不單獨分配自己的內(nèi)存空間,而指針擁有自己的內(nèi)存空間
(3) 引用一經(jīng)初始化,不能再引用其它變量,而指針可以
(4) 盡可以的使用引用,不得已時使用指針。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
C/C++中棧(stack)&堆(heap)詳解及其作用介紹
這篇文章主要介紹了C/C++中棧(stack)&堆(heap)詳解及其作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09C++中vector<vector<int>?>的基本使用方法
vector<vector<int>?>其實就是容器嵌套容器,外層容器的元素類型是vector<int>,下面這篇文章主要給大家介紹了關于C++中vector<vector<int>?>的基本使用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07