Gå til innhold

Funksjon med peker som argument, C [LØST]


Anbefalte innlegg

Noen som kan si hva som er feil i denne kodesnutten, laget i C.

 

#include<stdlib.h>
#include<stdio.h>

struct list_el {
int val;
struct list_el * next;
};

typedef struct list_el item;

void list(item *c, item *h, int i) {

c = (item *)malloc(sizeof(item));
c->val = i;
c->next  = h;
h = c;
}

void main() {
item * curr, * head;
int i;
  
head = NULL;

for(i=1;i<=10;i++) {
 list(&curr, &head, i);
}

curr = head;

while(curr) {
 printf("%d\n", curr->val);
 curr = curr->next;
}
}

 

Får følgende feilmelding.

 

linked.c: In function `main':
linked.c:26: warning: passing arg 1 of `list' from incompatible pointer type
linked.c:26: warning: passing arg 2 of `list' from incompatible pointer type
linked.c:19: warning: return type of `main' is not `int'

Endret av Orjanp
Lenke til kommentar
Videoannonse
Annonse

Kommer av at du sender inn en peker til peker (item**) til list() funksjonen. Men list() funksjonen din tar kun pekere til item (item*). Du må modifisere list() funksjonen din til å motta item** pekere. Eksempel:

 

void list(item **c, item **h, int i) 
{
  *c = (item *)malloc(sizeof(item));
  (*c)->val = i;
  (*c)->next  = *h;
  *h = *c;
}

 

Den siste warningen fjerner du ved å bytte ut "void main()" med "int main()" (main skal returnere en int ifølge standarden)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...