Przekazanie wskaźnika listy do funkcji

0

Witam.
Mam utworzoną listę. W programie głównym utworzyłem wskaźnik na listę i chciałbym go przekazać do funkcji init, w której przydzieliłbym mu pamięć i wypełniłbym pole liczba. W jaki sposób przekazać dany wskaźnik do funkcji, aby móc na nim operować?
Uprzedzając pytania. Zapoznałem się z referencją, lecz w tym przypadku nie do końca to rozumiem.

void podziel(int* a){
	*a=*a/10;
}
int main(){
	int x=230;
	podziel(&x)
}

void podziel(int& a){
	a=a/10;
}
int main(){
	int x=230;
	podziel(x)
}
struct Liczby{
	int liczba;
	struct Liczby *next;
};

void init(struct Liczby **head){
	*head=(struct Liczby*)malloc(sizeof(struct Liczby));
	*head->liczba=10;
	
}

int main() {
	struct Liczby *head=NULL;
	init(head);
	printf("%d", head->liczba);
	return 0;
}
1

Pomijając fakt że ta init jest niepoprawna, oraz ma niewłaściwą nazwę.

init(&head);

Proponuję takie podejście:

#include <stdio.h>

typedef struct ValueNode
  {
   int value;
   struct ValueNode *next;
  } ValueNode;
 
ValueNode *append(int value,ValueNode *next)
  {
   ValueNode *tmp=(ValueNode*)malloc(sizeof(ValueNode));
   tmp->value=value;
   tmp->next=next;
   return tmp;
  }
 
void showValueNodes(ValueNode *head)
  {
   printf("{");
   for(;head;head=head->next) printf(" %d",head->value);
   printf(" }\n");
  }

int main()
  {
   ValueNode *head=NULL;
   showValueNodes(head);
   head=append(10,head);
   showValueNodes(head);
   head=append(20,head);
   showValueNodes(head);
   head=append(30,head);
   showValueNodes(head);
   return 0;
  }

http://ideone.com/b3l3sB

0

Ok. Co jeżeli teraz muszę dodać nowy element do listy ( na jej początek )? Chciałbym zrobić to za pomocą void.

void Dodaj(Liczby *head){
	Liczby *tmp=(Liczby*)malloc(sizeof(Liczby));
	tmp->next=head;
	head=tmp;
}
Dodaj(&head1);

I znów pytanie jak przekazać do funkcji początek listy z programu głównego, aby móc ją zmieniać? Wskaźnik na wskaźnik?

2
HipolitZabujca napisał(a):

Chciałbym zrobić to za pomocą void.
Może w końcu przeczytasz jakiś byle kurs, aby przynajmniej umieć zadać sensownie brzmiące pytanie.

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

typedef struct ValueNode
  {
   int value;
   struct ValueNode *next;
  } ValueNode;
 
void insert(ValueNode **head,int value)
  {
   ValueNode *tmp=(ValueNode*)malloc(sizeof(ValueNode));
   tmp->value=value;
   tmp->next=*head;
   *head=tmp;
  }
 
void showValueNodes(ValueNode *head)
  {
   printf("{");
   for(;head;head=head->next) printf(" %d",head->value);
   printf(" }\n");
  }
 
int main()
  {
   ValueNode *head=NULL;
   showValueNodes(head);
   insert(&head,10);
   showValueNodes(head);
   insert(&head,20);
   showValueNodes(head);
   insert(&head,30);
   showValueNodes(head);
   return 0;
  }

http://ideone.com/3BP4Ke

0

Ok, wszystko jasne. Do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1