在C語言中,“&”主要有兩個用途。
-
取地址運算符:C語言中,"&"用來返回一個變量的內存地址。例如,假設我們定義了一個整數變量?
int a = 10;
,那么?&a
?就代表了這個變量所在的內存地址。 -
位運算符:在做位運算的時候,"&"代表“按位與”運算。比如,
a & b
?則是將a和b每一位進行“與”運算(兩個位都為1才得1,否則得0)。
在C語言中,“*”和“**”都和指針相關。
-
"*": 單星號??有兩個主要用途。
- 在聲明變量的時候,它用來指明這是一個指針變量,也就是這個變量存放的是一個內存地址,而不是一個常規的直接數值。例如,
int *p;
就是聲明了一個指向整型的指針p。 - 在已經有指針變量的情況下,它用來"解引用"指針,也就是獲取指針所指向的內存地址中的值。例如,
int a = *p;
就是將指針p所指向的值賦給了整型變量a。
- 在聲明變量的時候,它用來指明這是一個指針變量,也就是這個變量存放的是一個內存地址,而不是一個常規的直接數值。例如,
-
"**": 雙星號??在C語言中是用來聲明或操作二級指針的。
- 在聲明變量時,
int **p;
表示p是一個指向指針的指針,也即二級指針。 - 在操作變量時,它可用來解引用二級指針。比如
int a = **p;
就是將p指向的指針所指向的值賦給了整型變量a。
?
- 在聲明變量時,
?變量 a 有兩種含義, 一種是存儲單元的地址, 一種是存儲單元中的值,? CPU就是根據存儲單元的地址找到存儲單元中的值,? 一個東西兩種含義,就有了歧義,? 為了避免歧義,? ?C語言規定 變量 a 表示存儲單元中的值, &a 表示存儲單元的地址.? 如何 變量 a 表示的是一個地址(比如 int * a), 那么 *a 就表示那個地址的存儲單元存的值.