Так что я сделал вариант этого проекта класса.
Первоначально проект класса был таким:
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)
?
Вторая часть **(array + index)
не работает, потому что вы, вероятно, не выделили память для второго измерения.
Когда вы делаете *(array + index)
, вы получаете указатель на int int*
, Когда ты теперь разыграешь еще раз **(array + index)
, вы получите значение, на которое указывает указатель.
Но когда этот указатель не инициализирован, вы получаете ошибку сегментации.
Чтобы сделать эту работу, вы должны инициализировать int*
массив
for (int i = 0; i < size; ++i)
array[i] = new int[other_size];
Олаф правильно, также добавить в первой части func возвращает int& ссылка на существующую переменную, так что это правильно. Было бы выдано сообщение об ошибке, если func возвращается в int *, указатель / адрес int