#include using namespace std; int main () {int * listPtr = new int [5]; listPtr [0] = 0; listPtr [1] = 1; listPtr [2] = 2; listPtr [3] = 3; listPtr [4] = 4; //lägga nytt element. listPtr [5] = 5; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; if (listPtr == NULL) {cout} --listPtr; --listPtr; --listPtr; --listPtr; --listPtr; återvända 0; } Du måste dekrementera pekaren, samma antal gånger som du inkrementerade det.
Om du inte dekrementera, index i hakparenteserna för pekaren kommer inte längre avspeglar deras avsedda (original) värde; enligt detta villkor, kommer pekaren med index inte tillbaka rätt värde. Läs ovanstående kod om du inte har gjort det (prova). Det finns fortfarande ett problem: Antag att den nya delen inte kunde läggas till eftersom dess pekare skulle peka på en minnesposition som redan har fattats av något annat föremål okänd för oss. I det fallet när du ökar pekaren antalet gånger skulle det fortfarande pekar på en adress som existerar, vilka inte är NULL.
I detta fall kommer if-check med NULL berättar att en adress finns men adressen inte skulle ha vår del (och dess värde). Detta är en felaktig slutsats. Ett bättre test är följande: if (* listPtr = 5!) {Cout} I if-villkoret, se om det returnerade värdet är vi avreferera pekaren till minnespositionen av den förmodade tillagda objektet och vi samma som värdet vi skickade för extra elementet. I programmet över värdet vi skickade var 5. Iterator En pekare är adressen till ett objekt i minnet.
Vi såg ett problem över att när du flyttar pekaren i matrisen (matris namn) före ett antal gånger, måste du flytta det bakom samma antal gånger, annars indexeringen kommer att gå fel. Så det är inte tillrådligt att flytta pekaren i matrisen. Du kan ha mer än en pekare som pekar på samma adress i minnet; det är du kan ha pekare av olika namn som pekar på samma adress. I ovanstående kod, ville vi adressen för den sis