2017-08-13 61 views
2

我有這些類型的正確認識的煩惱:輸入C以下語句++

爲:

int* j; 
int** k; 
  1. *j

  2. &j

  3. **j

  4. *&j

  5. *k

  6. &k

  7. **k

  8. *&k

  9. &*k

我的想法:

  1. int** - 雙INT指針?

  2. 地址爲j指針 - 地址類型是什麼? (十六進制值)

  3. int***

  4. 指針,指向地址j指針?

  5. int***

  6. 地址,雙指針k

  7. int****

+2

'*'在用於聲明指針的聲明中,但是在聲明中它可以用來取消引用一個指向調用乘法運算符的指針。所以1)'* j'給定那種類型的'j'是'int *'將產生'int&'。 '&'中聲明用於聲明左值參考,但在語句中它可用於取地址或調用*按位與運算符*。 – VTT

+1

我建議閱讀[此](https://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in?rq=1)並看看你的理解在哪裏。 –

+1

提示:'INT * j'不僅意味着 「'j'是'INT *'」,還要 「'* j'是'int'」。這是故意的。 – MSalters

回答

5

正如評論*&提到有不同的語義取決於他們是否出現在聲明或說明:

  1. *j取消引用j
  2. &j注意到的j
  3. **j雙反引用地址單個指針(錯誤)
  4. *&j取消引用的j地址(相當於j
  5. *k解除引用k(產生另一個指針)
  6. &k注意到k
  7. **k Double的地址解引用一個雙指針(OK)
  8. *&k取消引用的的k地址(相當於k
  9. &*k注意到解除引用的地址指針

看到一個live demo


注:

地址對於j指針 - 地址什麼類型? (十六進制值)

十六進制值僅作爲通常的指針表示,否則,這些只是數字/值。十六進制不符合類型,它只是一個數字表示。

+0

感謝您的回答。所以*&否定對方,並且聲明*&k = k是真的?另外一個問題 - 我們只能間接引用x次的變量,只有當它已被引用至少x次吧? (比如,我們不能使用雙引號,單指針,但是我們可以將三級解引用5級指針?) – Piodo

+0

@Piodo關於您的其他問題:是的。解引用'int ***'一次產生一個'int **'並且兩次產生一個'int *'。 – user0042