Арифметика указателя на указатель указателя (* argv [])? - PullRequest
2 голосов
/ 25 ноября 2010

Мне известно, что foo[bar] равно *(foo + bar), но что равно *foo[bar], например, доступ к *argv[2]?Я немного запутался в понимании этого, я предположил, что-то вроде *(*(foo) + bar), но не уверен ...

Я прошу прощения, если это простой ответ.

Ответы [ 5 ]

5 голосов
/ 25 ноября 2010

*a[b] эквивалентно *(a[b]) из-за правил приоритета C и C ++. так *a[b] эквивалентно **(a+b)

3 голосов
/ 25 ноября 2010

Если следующие значения эквивалентны,

foo[bar]
*(foo + bar)

Тогда следующие условия также эквивалентны:

*foo[bar]
**(foo + bar)
2 голосов
/ 25 ноября 2010

Насколько я понимаю, это **(foo + bar)

Почему?

*foo[bar] разбивается на * и foo[bar], поскольку * выполняется после разыменования foo[bar].

Вы уже ответили, что foo[bar] == *(foo + bar)

Теперь добавьте еще один* и у вас есть *(*(foo + bar))

Что также упрощает до **(foo + bar)

0 голосов
/ 25 ноября 2010

Предполагая, что объявление char *argv[], argv[2] ссылается на третий элемент массива argv, который является char *, и *argv[2] разыменовывает этот указатель, давая вам первый символ в этой строке.

0 голосов
/ 25 ноября 2010

*foo[bar] - разыменование указателя на foo[bar].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...