Непонятно, что вы думаете, что создали указатель на массив из 7
int? Вы этого не сделали. Фактически вы создали массив указателей 7
для int. Таким образом, здесь нет «второго указателя», который указывает на массив. Существует только один указатель, указывающий на первый из 7 указателей (test
).
И с *test
вы получаете тот первый указатель, который вы еще не инициализировали.Если вы хотите добавить 1
в номер , то, вы бы добавили 1
в случайный адрес. Но если вы добавите 1
в test
, вы получите указатель, указывающий на второй указатель массива. И отменяя , что вы получаете тот второй указатель, который вы сделал инициализировать.
То, что вы описали бы быть достигнуто с помощью другого синтаксиса
typedef int array[7];
array* test = new int[1][7];
// Note: "test" is a pointer to an array of int.
// There are already 7 integers! You cannot make it
// point to an int somehow.
*(*test + 1) = 7;
int *p1 = *test
int i1 = *(p1 + 1); // i1 is 7, second element of the int[7]
delete[] test;
Без использования ЬурейеЕ, это выглядит следующим образом
int(*test)[7] = new int[1][7];
То есть, вы создали один- массив элементов, где тип элемента - это 7-элементный массив из int. new
возвращает указатель на этот массив. Обратите внимание, что важна скобка: *
имеет меньше приоритета, чем [7]
, так что в противном случае это было бы принято как массив из 7 указателей на целые числа.
Просто нести эстафету из других товарищей. Если просить об этом глупо, то не спрашивать в случае путаницы, это ошибка. – Chubsdad