#include
int main()
{
int b[10];
int ( *a )[ 10 ]; // эта
a = b; // error
a[ 0 ] = new int; // error
a = new int; // error
}
Пытаюсь методом подбора понять что это и как это используется
Ответ
Чтобы проще было понять запись
int ( *a )[ 10 ];
можно ввести определение алиаса для массива
typedef int T[10];
T *a;
то есть объекты, которые может адресовать указатель, представляют собой целочисленные массивы из десяти элементов.
Если вы хотите, например, чтобы этот указатель адресовал такой массив, вы можете написать
typedef int T[10];
T b;
T *a;
a = &b;
Тогда выражение *a или a[0] представляет собой массив b
Например, вы можете написать
typedef int T[10];
T b;
T *a;
a = &b;
for ( int i = 0; i < 10; i++ ) a[0][i] = i;
Если хотите динамически выделить массив, то вам следует записать
typedef int T[10];
T *a;
a = new T[1];
Это эквивалентно следующему фрагменту кода
int ( *a )[10];
a = new int[1][10];
То есть такой указатель используется обычно при работе с двумерными массивами. Например,
#include
int main()
{
const size_t M = 2;
const size_t N = 10;
int b[M][N] =
{
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
{ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }
};
for ( int ( *a )[N] = b; a != b + M; ++a )
{
for ( int x : *a ) std::cout << x << ' ';
std::cout << std::endl;
}
}
Вывод на консоль
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
Комментариев нет:
Отправить комментарий