淺談C++中的引用和指針
引用
定義引用變量
C++允許為已定義的變量再起一個新的別名,稱為變量的引用名。
引用名看起來像是一個變量名,但它是一種特殊變量,稱為引用變量,或簡稱為引用。
引用變量與其所引用的變量共用同一個內存單元,定義引用變量時不再單獨分配內存空間。
注意:引用變量需與被引用變量類型相同
格式:
引用類型 &引用變量名 = 被引用變量名;
示例:
#include<iostream> using namespace std; int main(){ int a = 10; int b = 20; cout << "a的值: a = " << a << endl; cout << endl; int &aa = a; //定義引用變量aa,aa和a共用同一個內存單元 cout << "引用變量aa的值:aa = " << aa << endl; aa = b; cout << "a的值變?yōu)?0:a: " << a << endl; return 0; }
運行結果:
a的值: a = 10
引用變量aa的值:aa = 10
a的值變?yōu)?0:a: 20
--------------------------------
Process exited with return value 0
Press any key to continue . . .
指針
取地址運算符
計算機對內存進行讀寫操作的最小單位是字節(jié)。為每個字節(jié)指定一個整數(shù)編號,稱為該字節(jié)的內存地址。
程序執(zhí)行時,計算機將系統(tǒng)中的空閑內存分配給程序中定義的變量。
C++語言提供一個取地址運算符 “&” 來獲取變量的內存地址。
格式:
& 變量名
示例
#include<iostream> using namespace std; int main(){ int a = 10; cout << "a的值: a = " << a << endl; cout << "a的地址: &a = " << &a << endl; return 0; }
運行結果:
a的值: a = 10
a的地址: &a = 0x6bfee8
--------------------------------
Process exited with return value 0
Press any key to continue . . .
定義指針變量
只能指向同一類型的不同變量 格式:
指針類型 *指針變量名;
示例
#include<iostream> using namespace std; int main(){ int a = 10; int x = 20; cout << "a的值: a = " << a << endl; cout << "a的地址: &a = " << &a << endl; cout << endl; int* b = &a; //指針b指向a的地址 cout << "b指針存儲的a的地址:b = " << b << endl; cout << "*b表示間接訪問a的值:*b = " << *b << endl; return 0; }
運行結果:
a的值: a = 10
a的地址: &a = 0x6bfee4
b指針存儲的a的地址:b = 0x6bfee4
*b表示間接訪問a的值:*b = 10
--------------------------------
Process exited with return value 0
Press any key to continue . . .
指針運算符 *
通過內存地址間接訪問變量
示例
#include<iostream> using namespace std; int main(){ int a = 10; cout << "a的值: a = " << a << endl; cout << "a的地址: &a = " << &a << endl; cout << endl; int &aa = a; //定義引用變量aa,aa和a共用同一個內存單元 cout << "引用變量aa的值:aa = " << aa << endl; cout << "引用變量aa的地址:&aa = " << &aa << endl; cout << endl; int* b = &a; //指針b指向a的地址 cout << "b指針存儲的a的地址:b = " << b << endl; cout << "*b表示間接訪問a的值:*b = " << *b << endl; return 0; }
運行結果
a的值: a = 10
a的地址: &a = 0x6bfee4
引用變量aa的值:aa = 10
引用變量aa的地址:&aa = 0x6bfee4
b指針存儲的a的地址:b = 0x6bfee4
*b表示間接訪問a的值:*b = 10
--------------------------------
Process exited with return value 0
Press any key to continue . . .
訪問一個變量的三種方式(定義一個變量a之后)
- 直接訪問(a): 通過變量名a來直接訪問
- 通過引用變量名間接訪問(aa): 為變量a定義一個引用變量aa,通過引用名aa來訪問變量a內存單元是一種間接訪問的形式,被稱為變量的間接訪問。
- 通過內存地址間接訪問 (*b): 定義一個指針變量b保存變量a的地址,再通過指針變量b中所保存的地址來訪問變量a的內存單元,這是另一種形式的間接訪問。
到此這篇關于淺談C++中的引用和指針的文章就介紹到這了,更多相關C++引用和指針內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++ LeeCode題目:比特位計數(shù)和買賣股票的最佳時機
這篇文章主要介紹了基于C語言計算比特位計數(shù)和買賣股票的最佳時機,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2021-07-07C++中Digraphs、Trigraphs和Tokens的深入講解
這篇文章主要給大家介紹了關于C++中Digraphs、Trigraphs和Tokens的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-09-09使用VS2010創(chuàng)建MFC ActiveX工程項目
VS2010開發(fā)ActiveX有兩種方法,分別是MFC和ATL。MFC開過起來比較簡單,但是最終生成的文件比較大,ATL是專門用來開發(fā)ActiveX的,但是相對比較難,必須知道很多原理機制和API。咱先從MFC開發(fā)ActiveX開始吧。2015-06-06QT5中使用QRegularExpression代替QRegExp方法代碼
這篇文章主要給大家介紹了關于QT5中使用QRegularExpression代替QRegExp的相關資料,正則表達式(regep)是處理字符串和文本的強大工具,驗證regexp可以測試子字符串是否滿足某些條件,例如是整數(shù)或不包含空格,需要的朋友可以參考下2024-04-04