首页 > 其他分享 >cgo:go数组转c数组调用c函数

cgo:go数组转c数组调用c函数

时间:2023-12-07 20:56:46浏览次数:27  
标签:arr rows cgo int goInt2DArray cols 数组 go

package main

/*
#include <stdio.h>

void processInt2DArray(int* arr, int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", *(arr + i * cols + j));
        }
        printf("\n");
    }
}
*/
import "C"

func main() {
    // 创建一个 Go 中的二维整数数组
    goInt2DArray := [][]C.int{
        {1, 2},
        {4, 6},
        {7, 8},
        {2, 6},
    }
    cIntArray := [4][2]C.int{
        {C.int(goInt2DArray[0][0]), C.int(goInt2DArray[0][1])},
        {C.int(goInt2DArray[1][0]), C.int(goInt2DArray[1][1])},
        {C.int(goInt2DArray[2][0]), C.int(goInt2DArray[2][1])},
        {C.int(goInt2DArray[3][0]), C.int(goInt2DArray[3][1])},
    }
    // 获取数组的指针并传递给 C 函数
    rows := len(goInt2DArray)
    cols := len(goInt2DArray[0])
    C.processInt2DArray(&cIntArray[0][0], C.int(rows), C.int(cols))
}

 

标签:arr,rows,cgo,int,goInt2DArray,cols,数组,go
From: https://www.cnblogs.com/wosun/p/17883917.html

相关文章

  • “数组”类型(python中都可[]的一些数据类型)
    “数组”类型(python中都可[]的一些数据类型)list特点是可变的、能动态扩容,可存储Python中的一切对象,使用时不用指定存储的元素的类型。>>>arr=["one","two","three"]>>>arr[0]'one'#动态扩容>>>arr.append(4)>>>arr['one',......
  • MongoDB 备份与恢复
    1.1MongoDB的常用命令mongoexport/mongoimportmongodump/mongorestore有以上两组命令在备份与恢复中进行使用。1.1.1导出工具mongoexportMongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指......
  • E. Good Triples
    E.GoodTriplesGivenanon-negativeintegernumber$n$($n\ge0$).Let'ssayatripleofnon-negativeintegers$(a,b,c)$isgoodif$a+b+c=n$,and$digsum(a)+digsum(b)+digsum(c)=digsum(n)$,where$digsum(x)$isthesumofdigitsofn......
  • go-zero 的 etcd 配置
    实现代码在core/discov/config.go文件中:typeEtcdConfstruct{ Hosts[]string Keystring IDint64`json:",optional"` Userstring`json:",optional"` Passstring`jso......
  • 560. 和为 K 的子数组
    给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。 示例1:输入:nums=[1,1,1],k=2输出:2示例2:输入:nums=[1,2,3],k=3输出:2 提示:1<=nums.length<=2*104-1000<=nums[i]<=1000-10......
  • go defer修改返回值
    golang在defer修改返回值时需要格外注意!如果未提前声明返回值的话,在defer中修改返回值是无效的操作。原因如下:packagemainfunctest1()int{ i:=1 deferfunc(){//实际则是将局部变量i的地址指针传入,调用runtime.deferproc函数 i++ }() returni//将i的......
  • [3分钟]GO:不要错误的使用并发
    七、并发由于Go语言的并发功能,经常被选作项目编程语言。Go语言团队已经竭尽全力以廉价(在硬件资源方面)和高性能来实现并发,但是Go语言的并发功能也可以被用来编写性能不高同时也不太可靠的代码。这里有一个二分法;Go语言的最大特点是简单、轻量级的并发模型。作为一种产品......
  • [效率大杀器] go工具篇:dlv + goland 实现远程调试
    dlv+Goland远程调试远程调试就是使用使用本地IDE来调试远程服务器上的服务。本地打断点,调用远程服务的接口。本地就会停在断点。相当于debug远程服务。优点是可以保持环境的一致性。dlv的安装git仓库:https://github.com/derekparker/delve将div安装到远程服务器。......
  • [小白入门指南] 如何使用gorm操作MySQL
    1.使用gorm的前置条件1.1MySQL的安装和配置1.2NaviacteForMySQL162.gorm基本操作2.1增2.2查2.3改2.4删2.5gorm迁移1.使用gorm的前置条件1.1MySQL的安装和配置Debian中安装MySQL|MySQL创建用户并授予权限#用rpm查看是否安装了MySQLrpm-qa|gr......
  • go-zero 开发入门-加法客服端示例
    定义RPC接口文件接口文件add.proto的内容如下:syntax="proto3";packageadd;optiongo_package="./add";messageAddReq{int32a=1;int32b=2;}messageAddResp{int32sum=1;}serviceAdder{rpcadd(AddReq)returns(A......