Когда вы добавляете элемент, используя квадратные скобки и указатель массива как показано выше, указатель не увеличивается Вы должны увеличить указатель несколько раз, пока он не указывает к дополнительным элементом, прежде чем вы можете использовать его, чтобы проверить, если возвращенное значение NULL. Следующий код иллюстрирует это для INT динамического массива. #include с помощью патезрасе; INT Main () {INT * listPtr = новый INT [5]; listPtr [0] = 0; listPtr [1] = 1; listPtr [2] = 2; listPtr [3] = 3; listPtr [4] = 4; //добавить новый элемент.
listPtr [5] = 5; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; если (== NULL listPtr) {} соиЬ --listPtr; --listPtr; --listPtr; --listPtr; --listPtr; вернуть 0; } Вы должны уменьшить указатель, такое же количество раз, что вы, увеличенное его. Если вы не уменьшать, индекс в квадратных скобках для указателя больше не будет отражать их целевое (оригинал) значение; при том условии, указатель с индексом не будет возвращать правильное значение. Читайте выше код, если вы не сделали этого (попробуйте).
Существует еще одна проблема: Предположим, что новый элемент не может быть добавлен, потому что его указатель будет указывать на положение памяти, которая уже принятым какой-то другой объект неизвестного нам. В том случае, когда вы увеличить указатель на количество раз это будет по-прежнему указывают на адрес, который существует, который не NULL. В этом случае, если проверка с нулевым покажет нам, что адрес существует, но адрес не будет иметь наш элемент (и его значение). Это неправильный вывод.
Лучше тест следующим образом: если (* listPtr = 5) {соиЬ} В IF-состоянии, мы разыменования указателя на ячейку памяти предполагаемого добавленного объекта, и мы видим, если возвращенное значение такое же, как значение мы послали для добавленного элемента. В программе выше значение мы послали было 5 Итератор указатель является адрес объекта в памяти. Мы видели выше проблемы, что, когда вы перемещаете указатель массива (имя массива) впереди несколько раз, у вас есть, чтобы пе