[C] ik snap het eventjes niet

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • a3konijn
  • Registratie: Oktober 2000
  • Laatst online: 24-07 14:34
Ik ben een tentamen en het leren over programmeren in C. Daarbij kwam ik de volgende opgave tegen in een oud tentamen.

Wat is de output van de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>

void main()
{
char s[5] = "abcd";
char *lijst[4];

int i;

for(i=0; i<4 ; i++)
{
lijst[i] = s;
}

printf("%s %s %s %s\n", lijst[0], lijst[1], lijst[2], lijst[3]);
strcpy(lijst[1] ,"pq");
    printf("%s %s %s %s\n", lijst[0], lijst[1], lijst[2], lijst[3]);
lijst[2] = "brood";
printf("%s %s %s %s\n", lijst[0], lijst[1], lijst[2], lijst[3]);
}

Het antwoord moet zijn (zelf ervaren na compilatie):

abcd abcd abcd abcd
pq pq pq pq
pq pq brood pq

Dit had ik echter niet verwacht. De eerste regel begrijp ik nog wel. Die 2 erna echter niet.

Wie heeft de oplossing / uitleg?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

je hebt een array van chars, s, van 5 chars groot, waarin "abcd" staat

verder heb je nog een array van pointers, lijst, met 4 elementen

eerst laat je alle elementen in de lijst naar de array s wijzen

dan kopieer je "pq" naar de array waar lijst[1] naar wijst (s dus), dus in s komt "pq" te staan, en aangezien elk element naar deze array wijst krijg je dus 4x pq als output

vervolgens laat je lijst[2] naar een andere array wijzen, namelijk eentje waar "brood" in staat. Je veranderd hier de array s niet, en alle andere elementen wijzen nog naar steeds naar s.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
code:
1
2
3
4
for(i=0; i<4 ; i++)
{
    lijst[i] = s;
}

lijst[0..3] bevat nu pointers naar s.
code:
1
strcpy(lijst[1] ,"pq");

wijzigd dus s.
code:
1
lijst[2] = "brood";

lijst[2] bevat nu de pointer naar "brood".

Acties:
  • 0 Henk 'm!

  • a3konijn
  • Registratie: Oktober 2000
  • Laatst online: 24-07 14:34
Hardstikke bedankt!

Heel logische en verhelderende uitleg.
Bij mij was het typisch een geval van te lang zitten leren.
En daarom had ik eventjes niet goed door dat je met de toewijzing van lijst[2] = "brood" de 3de pointer van de array van pointers met de naam lijst nu ergens anders naar toe liet wijzen. De rest had ik al hetzelfde op papier getekend.

Acties:
  • 0 Henk 'm!

Verwijderd

AAAAArrrrrggggghhhhhhh.

Ik kom zot bij het zien van da char array gedoe.

GEBRUIK STRINGS IN GODSNAAM!

Doe je met string.h

Acties:
  • 0 Henk 'm!

  • Sponz
  • Registratie: Juni 2001
  • Niet online

Sponz

nul nest parfait saif moi

Op maandag 14 januari 2002 15:05 schreef WaRgOd het volgende:
AAAAArrrrrggggghhhhhhh.

Ik kom zot bij het zien van da char array gedoe.

GEBRUIK STRINGS IN GODSNAAM!

Doe je met string.h
Dude, in C zijn strings array's of chars...
Pagina: 1