愛伊米

C語言C++中*和&的用法詳解

C++中&和*的用法一直是非常讓人頭疼的難點,網上講這些知識點多數都是分開講其用法的,沒有詳細的總結,導致我在這方面的知識結構格外混亂,在網上找到了一篇英文文章簡單總結了這兩個符號的一些用法,不過都是一些比較基礎的知識。

C語言C++中*和&的用法詳解

C/C++中*和&的用法

C++語言是C語言的超集。幾乎所有可以執行的C程式都是可以執行的C++程式。因此,寫一個不包含C++特性的C++程式是可能的,儘管cout和引用的使用(見下文)更好的構成了一個C++程式。C++和C在程式碼格式上偶爾會有不同,比如,在C語言中,我們這樣把p宣告為一個int型別的指標 int p,而在C++中我們使用int p(編譯器並不在意你使用的是哪種格式)。

在C/C++中,*和&有很多用法,具體的使用要根據程式碼內容來確定。

C中*的用法

(a) 乘法運算:x=y*z;

(b) 乘法賦值運算:x*=y;相當於x=x*y

(c) 註釋:/這裡是你的註釋/

(d) 指標的宣告:int p 或 int p; 讀法:p是指向一個整數型別的指標。

(e) 複合指標:int p; 或 int p; 讀法 p是一個指向一個指向整數型別的指標的指標。(同樣道理, int***p等等)

(f) 解引用:x=*p 把指標p指向的值賦值給x

&在C語言中的用法

(a) 邏輯與:if((a>1)&&(b

(b) 位運算與:x=a&b;

(c) 邏輯與賦值:x&=y;與 x=x&y含義相同

(d) 求地址運算子:p=&x;讀法:把x的地址賦給p(指標)

C++中&的補充用法

C++中有一種C不存在的變數型別引用變數(簡單說來為引用),儘管在C語言中用指標也可以實現類似的功能。

引用,指標,地址是聯絡密切的概念。地址是在電腦記憶體中的地址(一般是一些變數的值在記憶體中的儲存位置),指標是存地址的變數,所以指標可以“指向”記憶體地址。概念上講,引用變數本質上是指標的另一個名字(但是並不能被編譯器例項化)

在函式內像其他變數一樣定義一個引用是可能的,舉例

void main(void)

{

int i;

int& r = i;

}

但是這是沒有意義的,因為引用的使用和對引用的變數的使用是一樣的。

引用在函式的引數中被使用。

void main(void)

{

int i=3;

f(i);

cout

}

void f(int& r)

{

r = 2*r;

}

這段程式輸出“6”(2*r使被r引用的變數加倍,也就是指i)

在C語言中,實現同樣的功能,我們可以透過宣告f()為void f(int *r),其中r是指向整數型別的指標,然後呼叫引數&i(i的地址)呼叫函式f(),在函式f()內使用r的解引用,但是顯然,C++提供了一種更簡明的透過引用的方式向函式傳值,從函式中返回值。