面试题答案
一键面试package main
/*
#include <stdio.h>
#include <stdlib.h>
// 定义C语言中的结构体
typedef struct {
int id;
char name[20];
} MyStruct;
// 接收结构体参数的函数
void process_struct(MyStruct s) {
printf("ID: %d, Name: %s\n", s.id, s.name);
}
*/
import "C"
import (
"fmt"
"unsafe"
)
// Go语言中定义对应的结构体
type MyStruct struct {
id C.int
name [20]C.char
}
func main() {
// 初始化Go语言中的结构体
var s MyStruct
s.id = 1
C.strcpy(&s.name[0], C.CString("John"))
// 将Go语言结构体转换为C语言结构体指针
cS := (*C.MyStruct)(unsafe.Pointer(&s))
// 调用C语言函数
C.process_struct(*cS)
// 释放C.CString分配的内存
C.free(unsafe.Pointer(C.CString("John")))
}
上述代码首先在import "C"
之前通过注释的形式定义了C语言中的结构体和函数。然后在Go语言中定义了与之对应的结构体。在main
函数中初始化Go语言结构体,转换为C语言结构体指针并调用C语言函数,最后释放通过C.CString
分配的内存以避免内存泄漏。