其实很简单,我们看下代码就一目了然:
package main
/*
typedef struct {
int err;
int width;
int height;
} A;
A x = {0, 1, 2};
*/
import "C"
import (
"fmt"
)
func CStructToGo() {
var a C.A
a = C.x
var err, width, height int
err = int(a.err)
width = int(a.width)
height = int(a.height)
fmt.Println("error:", err)
fmt.Println("width:", width)
fmt.Println("height:", height)
}
func main() {
CStructToGo()
}
执行结果:
error: 0
width: 1
height: 2
成功: 进程退出代码 0.
C结构体被typedef自定义变量,通过C.var,可以引用c结构体变量,然后将值赋值给go变量,这样就可以在go语言中引用C结构体的变量。当然也可以不用typedef,在Go语言中,我们可以通过 C.struct_xxx 来访问C语言中定义的 struct xxx 结构体类型。