2010-11-25 188 views
2

我知道foo[bar]等於*(foo + bar),但*foo[bar]等於什麼,例如訪問*argv[2]?我在理解這件事時有點困惑,我想也許像*(*(foo) + bar),但我不確定..指針指針(* argv [])的指針運算?

我很抱歉,如果這是一個簡單的答案。

+1

你可以簡單地嘗試一下。如有疑問,請使用括號。 – codymanix 2010-11-25 17:32:26

回答

2

這是我的理解,這是**(foo + bar)

爲什麼?

*foo[bar]分解爲*和foo[bar],因爲*是在foo[bar]取消引用後完成的。

您已經回答了什麼foo[bar] == *(foo + bar)

現在添加一個*,你已經有了*(*(foo + bar))

這也簡化到**(foo + bar)

5

*a[b]由於C和C++優先規則,相當於*(a[b])。所以 *a[b]相當於**(a+b)

+0

啊!這很容易理解。我知道這很簡單,只需要等待11分鐘就可以接受:P – John 2010-11-25 17:33:04

3

如果下面是等價的,

foo[bar] 
*(foo + bar) 

然後下面是等效太:

*foo[bar] 
**(foo + bar) 
+0

謝謝詹姆斯。 – John 2010-11-25 17:34:27

0

*foo[bar]是指針引用到foo[bar]

0

假設char *argv[]聲明,argv[2]argv陣列,這是一種char *,和*argv[2]解引用該指針,給你在該字符串的第一個字符的第三個元素。