I if parentesen svarer allocbuf til index 0. Man ligger så ALLOCSIZE til index 0 og ender derfor på det sidste index i listen (index 9999). Dernæste trækker man allocp fra (som ved første kørsel svarer til index 0) og får derfor 9999. Hvis n så fx er 10 så evaluere if sætningen til sand.
Er denne gennemgang korrekt?
Jeg kan ikke forstå hvorfor allocp svarer til index 0. Når der i starten skrives:
static char *allocp = allocbuf;
så betyder dette vel bare at *allocp er ligmed indholdet på index 0 i allocbuf listen.
Normalt vil man vel skriver:
allocp = allocbuf;
for at angive at allocp peger på det første element i listen.
Når du erklærer et array, så har du egentlig kun en pointer til det første element, så når du skriver static char *allocp = allocbuf, så erklærer du en char pointer, der peger på første element (index 0) i arrayet allocbuf
det der forvirrer dig er muligvis at et array er det samme som en pointer... dvs flg er ækvivalente:
char * tjek = new char[100]; char tjek[100];
du kan få fat i char nr 40 i dem begge to med tjek[39] - og du kan få en pointer til char nr 1 i begge to med bare tjek - ligesom du kan lave pointere til en hvilken som helst char i arrayet med tjek + n - og det er det der sker i dit eksempel der, der bliver bare lavet fræk pointeraritmetik fordi sådan er Kernighan og Ritchie, de ka ik la vær
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.