title: Pass struct and array of structs to C function from Go
body: <p>Stuck with this problem. Able to get only the first member of passed structure... What I do wrong? And what is the right way to pass the structure from Go to C?  </p>
  
  <p>This is my example of how it doesn't work:  </p>
  
  <pre><code>package main
  
  /*
  #include &lt;stdio.h&gt;
  
  typedef struct {
      int a;
      int b;
  } Foo;
  
  void pass_array(Foo **in) {
      int i;
  
      for(i = 0; i &lt; 2; i++) {
          fprintf(stderr, "[%d, %d]", in[i]-&gt;a, in[i]-&gt;b);
      }
      fprintf(stderr, "\n");
  }
  
  void pass_struct(Foo *in) {
      fprintf(stderr, "[%d, %d]\n", in-&gt;a, in-&gt;b);
  }
  
  */
  import "C"
  
  import (
      "unsafe"
  )
  
  type Foo struct {
      A int
      B int
  }
  
  func main() {
  
      foo := Foo{25, 26}
      foos := []Foo{{25, 26}, {50, 51}}
  
      // wrong result = [25, 0]
      C.pass_struct((*_Ctype_Foo)(unsafe.Pointer(&amp;foo)))
  
      // doesn't work at all, SIGSEGV
      // C.pass_array((**_Ctype_Foo)(unsafe.Pointer(&amp;foos[0])))
  
      // wrong result = [25, 0], [50, 0]
      out := make([]*_Ctype_Foo, len(foos))
      out[0] = (*_Ctype_Foo)(unsafe.Pointer(&amp;foos[0]))
      out[1] = (*_Ctype_Foo)(unsafe.Pointer(&amp;foos[1]))
      C.pass_array((**_Ctype_Foo)(unsafe.Pointer(&amp;out[0])))
  }
  </code></pre>