Почему * printr в printf? - PullRequest
       1

Почему * printr в printf?

0 голосов
/ 24 октября 2018

В приведенном ниже коде не должно (*ptr)[1] быть (ptr)[1] вместо этого?Поскольку ptr также является указателем, так как a находится в a[][].

int a[][3] = {1, 2, 3, 4, 5, 6};
int (*ptr)[3] = a;
printf("%d", (*ptr)[1]);

1 Ответ

0 голосов
/ 24 октября 2018

Нет.

  • a - массив массивов.

  • ptr - указатель на [первый элемент] этот массив массивов.

  • *ptr является первым элементом этого массива (который сам является массивом!).

    • Это также может бытьзаписано ptr[0] (потому что *(a+n) равно a[n]).
  • (*ptr)[1] - первый элемент в этом результате.

    • Это также может быть записано ptr[0][1].

    • Это было бы более четко записано как a[0][1].

Ваш предложенный контрпример для ptr[1] - это следующий элемент в результате, все еще массив.

Это объявление также изворотливо;Инициализатор технически действителен, но не выполняет то, что вы думаете, так как он отображает только одно измерение .

В целом это не очень хороший код.

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