#include <iostream>
using namespace std;
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 <iostream>
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
Формально это - указатель на массив из 10 int
.
Так что присваивать нужно как
a = &b;
Если хотите использовать для присваивания элемента - то
(*a)[0] = 12; // Присваивание b[0] = 12
Если же вы имеете в виду массив массивов по 10 элементов, то
a[0][3] = 15; // Присваивание третьему элементу первого массива
// по адресу a значение 15 - то же, что и b[3] = 15;
Ну, а последнее... например, так:
using arr = int[10];
a = new arr[1];
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Решаю следующую задачу: есть некоторый файл, структура которого представляет собой набор блоковКаждый блок имеет заголовок и тело