CGo中传递多维数组给C函数
转自:http://www.cnblogs.com/cobbliu/p/5035358.html
package main /*
#include <stdio.h>
#include <string.h> 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 []byte
C.fill_array((*C.char)(unsafe.Pointer(&dir[])))
fmt.Println(string(dir[:]))
//var dirs [4][16]byte
dirs := make([][]byte, )
for i := ; i < ; i++ {
dirs[i] = make([]byte, )
} C.fill_2d_array((**C.char)(unsafe.Pointer(&dirs[][])), C.int())
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中多维数组类型的阐述比较明白。
CGo中传递多维数组给C函数的更多相关文章
- 如何在C中传递二维数组作为参数?
回答: 在C语言中,有很多方法可以将2d数组作为参数传递.在下面的部分中,我描述了将2d数组作为参数传递给函数的几种方法. 使用指针传递2d数组以在c中运行 多维数组的第一个元素是另一个数组,所以在这 ...
- C/C++怎样传递二维数组,转载自CSDN
用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). [以下转帖] ---------------------- ...
- C/C++如何传递二维数组?
用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). ----------------------------- ...
- C语言传递二维数组
方法一, 形参给出第二维的长度. 例如: #include <stdio.h> ] ) { int i; ; i < n; i++) printf("/nstr[%d] = ...
- C#中读取二维数组每位的长度
C#中的二维数组,如int[,] A=new int[a,b];则 a=A.GetLength(0);即可获得二维数组中第一维的长度. b=A.GetLength(1);即可获得二维数组中第二维的长度 ...
- Java中的二维数组
Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空 ...
- Py中的多维数组ndarray学习【转载】
转自:http://blog.sciencenet.cn/home.php?mod=space&uid=3031432&do=blog&id=1064033 1. NumPy中 ...
- iOS中的二维数组
首先我们知道OC中是没有二维数组的,二维数组是通过一位数组的嵌套实现的,但是别忘了我们有字面量,实际上可以和C/C++类似的简洁地创建和使用二维数组.这里总结了创建二维数组的两种方法以及数组的访问方式 ...
- 一些Python中的二维数组的操作方法
一些Python中的二维数组的操作方法 这篇文章主要介绍了一些Python中的二维数组的操作方法,是Python学习当中的基础知识,需要的朋友可以参考下 需要在程序中使用二维数组,网上找到一种这样的用 ...
随机推荐
- (惊艳)对象序列化和反序列--Hibernate的查询和新增极其相似
Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去 ...
- centos7配置openldap服务器
参考链接 https://www.cnblogs.com/bigbrotherer/p/7251372.html 上面这篇参考文件在最后登录是有问题的 vi /etc/openldap/sldap.c ...
- python re 正則表達式
夜深了.敲击键盘.用CSDN整理下python re 正則表達式是含有文本和特别字符的字符串,这些文本和特别字符描写叙述的模式能够识别各种字符串. 一下我们从实例结合理论来学习理解吧... 经常使 ...
- 算法(第4版) (Robert Sedgewick / Kevin Wayne 著)
第1章 基础 第2章 排序 第3章 查找 第4章 图 第5章 字符串 第1章 基础 public class Bag<T> : IEnumerable<T> { ]; ; pu ...
- python 高阶函数学习, map、reduce
一个函数可以接收另一个函数作为参数,这样的函数叫做高阶函数. 函数map(): map()函数接收两个参数,一个是函数,一个是Iterable, map把函数作用于序列的每一个元素,并把结果作为Ite ...
- 编译opencv python
1, 下载并且安装python2.7 + numpy 2,运行cmakegui打开opencv.应该要显示如下信息: Python 2: Interpreter: C:/Python27/python ...
- 关于Bagging
Bagging分为两种:Bagging和Pasting,前者是概率中的放回随机采样,后者是不放回随机采样:默认是放回采样随机:设置bootstrap=False即设置为不放回采样:默认bootstra ...
- windows可以使用curl啦(以及其他的Linux下面的指令)!
windows可以使用cUrl了!同期放出了tar指令,去年下半年才放出来的. 介绍文章 https://blogs.technet.microsoft.com/virtualization/2017 ...
- Spark Hadoop Free 安装遇到的问题
运行 ./sbin/start-master.sh : SparkCommand:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -cp /home/se ...
- 批处理手动设置电脑的ip
参考: http://blog.csdn.net/jiangzhanchang/article/details/7063152 http://wenda.haosou.com/q/1378697364 ...