В приведенном ниже коде не должно (*ptr)[1] быть (ptr)[1] вместо этого?Поскольку ptr также является указателем, так как a находится в a[][].
(*ptr)[1]
(ptr)[1]
ptr
a
a[][]
int a[][3] = {1, 2, 3, 4, 5, 6}; int (*ptr)[3] = a; printf("%d", (*ptr)[1]);
Нет.
a - массив массивов.
ptr - указатель на [первый элемент] этот массив массивов.
*ptr является первым элементом этого массива (который сам является массивом!).
*ptr
ptr[0]
*(a+n)
a[n]
(*ptr)[1] - первый элемент в этом результате.
Это также может быть записано ptr[0][1].
ptr[0][1]
Это было бы более четко записано как a[0][1].
a[0][1]
Ваш предложенный контрпример для ptr[1] - это следующий элемент в результате, все еще массив.
ptr[1]
Это объявление также изворотливо;Инициализатор технически действителен, но не выполняет то, что вы думаете, так как он отображает только одно измерение .
В целом это не очень хороший код.