Во-первых, я поддерживаю предложения других, чтобы избежать новых и использовать вместо них std :: vector. std :: vector избавляет от многих головных болей, вызванных указателями и массивами. Массивы - это решение C, а не C ++.
Чтобы ответить на ваш вопрос: вам не нужен тип указатель-указатель здесь. Причина в том, что массивы естественным образом адресуются указателем.
Когда вы говорите t = new temp[100];
, происходят две вещи:
- Новый массив выделяется из свободного хранилища (или «кучи»)
t
указывает на первый элемент нового массива.
Когда вы используете оператор p[i]
, на самом деле это синтаксический сахар для *(p + i)
. Например:
t[0]
эквивалентен *(t + 0)
, который является просто *t
, или элементу, на который указывает t
: первый элемент массива.
t[1]
эквивалентно *(t + 1)
. Поскольку t
- это указатель на первый элемент массива, t + 1
- это указатель на элемент, расположенный на одну позицию после первого: второй элемент. Так что *(t + 1)
дает вам второй элемент.
Используя эту систему, указатель temp *
может использоваться для ссылки на весь массив temp
вместо одного temp
экземпляра.
Если вы действительно хотите узнать о массивах и указателях, вы можете поступить хуже, чем читать главу 6 comp.lang.c FAQ . Обратите внимание, однако, что это ресурс C, а не ресурс C ++; это связано с тем, что в C ++ массивы обычно не используются, потому что у вас есть лучшая функция: std :: vector. Я настоятельно рекомендую вам сделать изучение std :: vector более приоритетным, чем изучение указателей и массивов.