Является ли ваше недопонимание тем, что вы думаете, что создали указатель на массив 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;
Без использования typedef это выглядит следующим образом:
int(*test)[7] = new int[1][7];
То естьВы создали одноэлементный массив, где типом элемента является массив из 7 элементов типа int.new
возвращает указатель на этот массив.Обратите внимание, что скобки важны: *
имеет меньший приоритет, чем [7]
, так что в противном случае это было бы принято как массив из 7 указателей на целые числа.