У меня есть структура C++, которая имеет динамически выделенный массив в качестве указателя. У меня есть функция для изменения массива, но он не работает (я думаю, это потому, что временная переменная указывает на исходное значение).Указатель элемента разыменования
struct s {
int *array;
int length;
...
s(int n) {
this->array = new int[n];
this->length = n;
}
...
void reverse() {
for (int i = 0; i < this->length; i++) {
int n = this->array[i];
this->array[i] = this->array[this->length - i - 1];
this->array[this->length - i - 1] = n;
}
}
...
}
Я думаю, что это делает, this->array[this->length - i - 1] = this->array[i]
Поэтому массив остается неизменным и не получает обратный. Я не знаю, как относиться к указателю массива или как просто принимать значение this->array[i]
в n.
вы логика делает двойной обратный. Для i = 0 вы поставили массив [n-1] в array [0], при i = n-1 вы кладете массив [0] в массив [n-1]. –
Я думаю, что первая часть цикла for сделает первую половину массива правильной, но затем сделает зеркальное изображение первой половины во второй половине. Для простоты кода, почему бы просто не использовать массив указателей, обратившись ко второму массиву, а затем переустановить указатель? –
Рекомендуем прочитать [Что такое правило 3?] (Http://stackoverflow.com/questions/4172722/what-is-the-ru-of-three), поскольку это может предотвратить несколько будущих вопросов. – user4581301