Go - 访问C动态分配数组

使用 unsafe 结合类型转换 *(*[6]C.type) 可将C动态分配数组转换为go识别固定数组类型.

示例

*(*[6]C.uint64_t)(unsafe.Pointer(ptr)) 转换指针ptr 为固定数组类型:

package main/*
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
void* alloc_int(void)
{uint64_t *p = (void *)malloc(sizeof(uint64_t) * 6);for (int i = 0; i < 6; i ++) {p[i] = i + 60;}return (void *)p;
}
*/
import "C"
import ("unsafe""fmt"
)func main() {ptr := C.alloc_int()v := *(*[6]C.uint64_t)(unsafe.Pointer(ptr))for _, a := range v {fmt.Printf("%v\n", a)}fmt.Printf("len: %v\n", len(v));fmt.Printf("0: %v\n", uint64(v[0]));
}

go build carray.go 输出结果:

# ./carray
60
61
62
63
64
65
len: 6
0: 60

Go - 访问C动态分配数组相关推荐

  1. c++ 动态分配数组_C/C++编程笔记:「C语言指针」民间解读版本

    相信很多同学在初学C语言时候,都会遇到遇到一个问题:指针,永远的神! 好消息,这个痛点将会在这篇文章得到解决,妈妈再也不用担心我的学习了! 一说指针,第一反应,指针是一种数据类型. c语言学习,重点就 ...

  2. 【matlab】访问元胞数组

    [matlab]访问元胞数组 这里我们先使用大括号来访问元胞数组 语法格式: 元胞数组{那个位置的元胞的下标}(当前元胞的具体元素的下标) 具体我们来看看代码是怎么写的: a{1,2}=ones(3, ...

  3. 通过指针访问二维数组的三种方法

    下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针.指针数组.数组指针.指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助. 程序如下: #include <std ...

  4. c++ 动态分配数组_C与C++内存管理避坑指南

    1 引言 对于计算机程序处理而言,对内存的管理就像是对一片雷区的管理,管理的好,可以杀死一片一片的bug,管理的不好,将使你自己抓狂,程序漏洞百出,直至崩溃,据调查80%的程序崩溃都是内存的管理出现问 ...

  5. C++ 笔记(08)— 数组(数组的声明、初始化、访问及修改数组元素)

    数组具有如下特点: 数组是一系列元素: 数组中所有元素的类型都相同: 所有的数组都是由连续的内存位置组成.最低的地址对应第一个元素,最高的地址对应最后一个元素. 1. 一维数组 1.1 声明数组 要声 ...

  6. python中二维数组如何按索引找元素_按索引或坐标访问二维数组中的元素

    设置 我正在用python编写一个类来处理一个二维的布尔数组.在class Grid(object): def __init__(self, length): self.length = length ...

  7. c语言文本按行分配数组元素,【转】C语言中动态分配数组

    int main() { int i = 0; int *a; int N; printf("Input array length: "); scanf("%d" ...

  8. 扩容是元素还是数组_数组是如何随机访问元素?数组下标为什么从0开始,而不是1?...

    作者:鹏磊 来源:搜云库技术团队 数组如何实现随机访问元素 什么是数组? 数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储相同类型的数据. 什么是线性表(Linear List) ...

  9. malloc动态分配数组以及指针数组大小

    对于二维数组:一般来说,当给两个数分别表示行列,但两个数的范围过大,就需要动态分配. int i,j,m,n;scanf("%d%d",&m,&n);int **a ...

  10. C Tricks(二)—— 按块访问二维数组

    int mat[][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 ...

最新文章

  1. c语言信号机制以及中断
  2. web项目部署到linux服务器出现的问题
  3. 【BZOJ】1679: [Usaco2005 Jan]Moo Volume 牛的呼声(数学)
  4. 【HDU - 2200】Eddy's AC难题(简单组合数学)
  5. mysql中最常用的存储引擎有_mysql常用的存储引擎有哪些
  6. python列表使用技巧大全_Python 基础起步 (六) List的实用技巧大全
  7. Python IO模型
  8. 集成海康威视Sadp SDK实现设置设备参数配置
  9. 计算机windows试题,计算机基础《Windows》考试试题
  10. 如何在Angular中引入AliPlayer
  11. [python]LDA模型使用流程及代码
  12. 银行招聘计算机考试时间,秋季银行招聘考试时间是什么时候?
  13. 2019春实习-百度-计算机视觉算法研发工程师真题
  14. 定义网络营销,到底和网店有什么区别
  15. 马尔可夫决策过程和贝尔曼方程
  16. 二维正态分布matlab程序,一维正态分布、二维正态分布的matlab实现
  17. 游戏建模次世代角色模型制作教程,内藏超级无敌干货!
  18. 为什么需要Secondary Index
  19. 每个程序员必须掌握的常用英语词汇(建议收藏)
  20. 嵌入式开发,从开发板到产品的过程是什么样的?

热门文章

  1. 惯性力偶矩公式中j_万众期待的倍量过左峰选股公式,通达信专用,学会收益再翻一倍!...
  2. Fresco 5.0以上内存持续增长问题优化
  3. springboot配置手动提交_Spring Boot 入门教程 | 图文讲解
  4. 随机函数_巧用随机函数,生成各种姓名组合。
  5. oracle表增加序列字段,Oracle创建表和创建序列和修改,增加sql字段
  6. 在Windows Server 2012R2离线安装.net framework3.5
  7. java模拟http_java模拟http请求的错误问题整理
  8. 马鞍数55c语言_c语言超全练习题(全面更新)
  9. iOS:Tagged Pointer
  10. 【2019】Power BI 9月产品功能更新解读