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++提供了一種更簡明的透過引用的方式向函式傳值,從函式中返回值。