Двойной указатель на массив целочисленных указателей; возвращая int & amp;

Так что я сделал вариант этого проекта класса.
Первоначально проект класса был таким:

int* array;
array = new int[size];

// int& method
return array[index];

Почему это работает? array[index] возвращает значение, а не адрес, верно? [] разыменовывает указатель?

— Вариация —

int** array;
array = new int*[size];

int& RA::setget(int index)
{

if ((index >= 0) && (index < capacity))
{
return **(array + index); // this part isn't working
}
else
throw out_of_range("blah"); // forgot the () out_of_range(). needed to put text in the exception!!!
}

Это не работает, но не так ли? int ** массив, так что я делаю **(array+index)?

0

Решение

Вторая часть **(array + index) не работает, потому что вы, вероятно, не выделили память для второго измерения.

Когда вы делаете *(array + index), вы получаете указатель на int int*, Когда ты теперь разыграешь еще раз **(array + index), вы получите значение, на которое указывает указатель.

Но когда этот указатель не инициализирован, вы получаете ошибку сегментации.

Чтобы сделать эту работу, вы должны инициализировать int* массив

for (int i = 0; i < size; ++i)
array[i] = new int[other_size];
1

Другие решения

Олаф правильно, также добавить в первой части func возвращает int& ссылка на существующую переменную, так что это правильно. Было бы выдано сообщение об ошибке, если func возвращается в int *, указатель / адрес int

0

По вопросам рекламы [email protected]