Ronny Haryanto wrote:
> 
> Halo,
> 
> Saya lupa caranya di C untuk pass by reference sebuah array yg berisi
> pointers. Saya coba spt di bawah dapetnya segfault. (Ceritanya mau bikin
> adjacency list utk suatu graph).
> 
> #include <stdio.h>
> #include <stdlib.h>
> 
> struct _edge
> {
>     int adj;
>     int cap;
>     int flow;
>     struct _edge* next;
> };
> typedef struct _edge edge;
> 
> void fungsi(edge** G[])
> {
>     /* saya mau mengubah isi G ini tapi supaya tidak hilang
>        setelah function ini return */
>     edge* curr;
>     curr = (edge*) malloc(sizeof(edge));
>     curr->adj = 1;
>     curr->cap = 2;
>     curr->flow = 3;
>     curr->next = NULL;
>     (*G)[0] = curr;
> }
> 
> int main()
> {
>     edge* G[5];
>     int i;
> 
>     for(i=0; i<5; i++)
>         G[i] = NULL;
> 
>     fungsi(&G);
> 
>     for(i=0; i<5; i++)
>         printf("%X\n", G[i]);
> }
> 
> Mohon saya diingatkan kembali. Makasih.
> 

Nggak usah pake reference, karena yg. diubah kan *isi* arraynya, bukan
variabel arraynya. Jadi si fungsi itu cukup begini:

   void fungsi(edge* G[])

Yg. ini buat mengingatkan gimana mbaca deklarasi variabel:

- edge *G[5] artinya:
  G is array [5] of pointer to edge. Kan dibacanya kurang lebih dari
  kanan ke kiri, sbb:
     - G[5]   -> G is array [5]
     - *      -> of pointer
     - edge   -> to edge

- edge** G[] artinya:
  G is array[] of pointer to pointer to edge (!!). Cara mbacanya sama
  juga:
  - G[]   -> G is array []
  - *     -> of pointer
  - *     -> of pointer
  - edge  -> to edge

sdgkan kalo yg. dimaksudkan 'pointer to array[] of pointer to edge',
syntaxnya:

   edge* (*G)[]

dibacanya:
  - (*G)  -> G is pointer (karena ada kurung, maka dia dibaca duluan)
  - []    -> to array []
  - *     -> of pointer
  - edge  -> to edge



> PS. sekalian ada yg punya URL utk referensi C terutama yg berurusan dengan
> complex data structure seperti linked list dan arrays?
> 

kalo yg. ini ndak tau, mungkin rekan2 yg. laen bisa mbantu. Ogut pake
C++ sih.. ;)

> --
> Ronny Haryanto
> 

cheers,
Benny


--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]

Kirim email ke