我有這些類型的正確認識的煩惱:輸入C以下語句++
爲:
int* j;
int** k;
*j
&j
**j
*&j
*k
&k
**k
*&k
&*k
我的想法:
int**
- 雙INT指針?地址爲
j
指針 - 地址類型是什麼? (十六進制值)int***
?指針,指向地址
j
指針?int***
地址,雙指針
k
int****
?
?
我有這些類型的正確認識的煩惱:輸入C以下語句++
爲:
int* j;
int** k;
*j
&j
**j
*&j
*k
&k
**k
*&k
&*k
我的想法:
int**
- 雙INT指針?
地址爲j
指針 - 地址類型是什麼? (十六進制值)
int***
?
指針,指向地址j
指針?
int***
地址,雙指針k
int****
?
?
正如評論*
和&
提到有不同的語義取決於他們是否出現在聲明或說明:
*j
取消引用j
&j
注意到的j
**j
雙反引用地址單個指針(錯誤)*&j
取消引用的j
地址(相當於j
)*k
解除引用k
(產生另一個指針)&k
注意到k
**k
Double的地址解引用一個雙指針(OK)*&k
取消引用的的k
地址(相當於k
)&*k
注意到解除引用的地址指針看到一個live demo
注:
地址對於j指針 - 地址什麼類型? (十六進制值)
的十六進制值僅作爲通常的指針表示,否則,這些只是數字/值。十六進制不符合類型,它只是一個數字表示。
'*'在用於聲明指針的聲明中,但是在聲明中它可以用來取消引用一個指向調用乘法運算符的指針。所以1)'* j'給定那種類型的'j'是'int *'將產生'int&'。 '&'中聲明用於聲明左值參考,但在語句中它可用於取地址或調用*按位與運算符*。 – VTT
我建議閱讀[此](https://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in?rq=1)並看看你的理解在哪裏。 –
提示:'INT * j'不僅意味着 「'j'是'INT *'」,還要 「'* j'是'int'」。這是故意的。 – MSalters