博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CGo中传递多维数组给C函数
阅读量:5151 次
发布时间:2019-06-13

本文共 3354 字,大约阅读时间需要 11 分钟。

package main/*                                                                                                                                                                                                                #include 
#include
void fill_array(char *s) { strcpy(s, "cobbliu"); } void fill_2d_array(char **arr, int columeSize) { strcpy((char*)(arr+0*sizeof(char)*columeSize), "hello"); strcpy((char*)(arr+1*sizeof(char)*columeSize/sizeof(char*)), "cgo"); } */import "C"import "fmt"import "unsafe"func main() { var dir [10]byte C.fill_array((*C.char)(unsafe.Pointer(&dir[0]))) fmt.Println(string(dir[:])) //var dirs [4][16]byte dirs := make([][]byte, 4) for i := 0; i < 4; i++ { dirs[i] = make([]byte, 16) } C.fill_2d_array((**C.char)(unsafe.Pointer(&dirs[0][0])), C.int(16)) fmt.Println(dirs) }

 需要注意的是,不能将Slice像这样转换: (*C.char)(unsafe.Pointer(&dir)),因为Slice在Go中实际上不是一个完全意义上的数组,它只是一种数据结构,带有若干头部,见http://blog.golang.org/go-slices-usage-and-internals,如果直接&dir,那相当于把dir这个数据结构的地址处的数据强制转换为*C.char,这样导致的后果完全不可期,运行时core掉是再正常不过的后果。

   https://groups.google.com/forum/#!topic/golang-nuts/Nb-nfVdAyF0 这里有一个关于多维数组的讨论,请看lan同学的回复,对于C和Go中多维数组类型的阐述比较明白。

Enjoy!

转载于:https://www.cnblogs.com/cobbliu/p/5035358.html

你可能感兴趣的文章
ecos新命令
查看>>
w3m常用快捷键
查看>>
三种方法实现Javascript控制ScrollBar(滚动条)
查看>>
Android 中 有趣味的GridView
查看>>
pku 3114 Countries in War tarjan缩点+spfa求最短路
查看>>
vtun 调试显示no hosts defined
查看>>
STM32硬件IIC操作
查看>>
Vue的v-for与v-if的联系
查看>>
设计模式之迭代器模式
查看>>
MySQL事务-ROLLBACK,COMMIT用法详解
查看>>
C#相关知识总结
查看>>
租房子多条件查询练习
查看>>
SVN服务器搭建和使用
查看>>
android 设置背景图片 xml的background和java的getDrawable()
查看>>
HZNU 2019 Summer training 4
查看>>
js实现数字每三位加逗号的方法
查看>>
域名和ip不能访问的原因
查看>>
2017最新PHP经典面试题目汇总(上篇)
查看>>
Java自学基础用法
查看>>
解决 /dev/mapper/centos-root 空间不足的问题
查看>>