Как я могу получить доступ к определенному индексу динамически распределенного массива через ссылку?

0

Я хочу сделать что-то вроде

int &a = *(new int[10]);
// access all the indices from this reference somehow.

Все, что я могу сделать, это что-то вроде:

int *b = &a;
b[1] = 10;

Могу ли я сделать это, используя ссылку? Если нет, то почему?

Теги:
reference
dynamic-memory-allocation

3 ответа

3
Лучший ответ

Вы должны использовать указатели, потому что оператор индекса массива в C++ определен только для указателей (и определенных пользователем классов, которые перегружали этот оператор). Однако указатель может быть просто временным:

(&a)[1] = 10;

Если вы хотите избежать указателей, вы можете просто использовать std::array или std::vector:

std::array<int, 10> a;
a[1] = 10;

std::vector<int> v(n);
v[1] = 10;
  • 0
    Это помогло. Спасибо :)
1

Вы можете использовать ссылку:

int (&a)[10] = (int (&)[10])*new int[10];

Тем не менее, вам все равно нужно удалить [] & a, и если вы знаете размер массива, и это не очень удобно, вы можете просто создать обычный массив на основе стека. Вы не можете создать ссылку на массив неизвестной/заданной длины. Учитывая, что вы также можете указывать указатели, это чрезвычайно ограниченное практическое применение (в основном для передачи массива шаблонам, которые сами связывают ссылки с ним, как правило, так что они могут неявно получить доступ к размеру массива).

1

Да, вы можете это сделать, но это идет вразрез с зерном: ссылки не предполагается использовать для получения других элементов массива, кроме ссылочного элемента. Пожалуйста, воздержитесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню