示例

package main
/*
#include <stdlib.h>
#include <stdio.h>struct Dog {char name[32];int  id;
};#define MAX_DOG 16struct Dog dogs[MAX_DOG];
*/
import "C"
import "fmt"
import "unsafe"func main () {var dog  C.struct_Dogfmt.Println("C Arrary >>>>>>>>")// C 定义数组可直接通过 range 访问for k, v := range C.dogs {//fmt.Println("k=", k)dog = vdog.id = C.int(k)fmt.Println("Id", int(dog.id))}fmt.Println("C Malloc >>>>>>>>")ptr := C.malloc(C.sizeof_struct_Dog * C.size_t(10))var e *C.struct_Dogvar Ptr uintptrfmt.Println("malloc", ptr)e = (*C.struct_Dog)(ptr)for i := 0; i < 10; i ++ {e.id = C.int(i)// 通过uintptr & unsafe.Pointer 访问内存地址Ptr = (uintptr)(unsafe.Pointer(ptr)) + (uintptr)(C.sizeof_struct_Dog * C.int(i))e = (*C.struct_Dog)(unsafe.Pointer(Ptr))}Ptr = uintptr(unsafe.Pointer(ptr))for i := 1; i < 10; i ++ {e = (*C.struct_Dog)(unsafe.Pointer(Ptr))fmt.Println("ptr", unsafe.Pointer(Ptr))fmt.Println("id", int(e.id))Ptr = (uintptr)(unsafe.Pointer(ptr)) + (uintptr)(C.sizeof_struct_Dog * C.int(i))}defer C.free(ptr)
}

输出:

# go build c_struct_array.go
# ./c_struct_array
C Arrary >>>>>>>>
Id 0
Id 1
Id 2
Id 3
Id 4
Id 5
Id 6
Id 7
Id 8
Id 9
Id 10
Id 11
Id 12
Id 13
Id 14
Id 15
C Malloc >>>>>>>>
malloc 0x196b7e0
ptr 0x196b7e0
id 1
ptr 0x196b804
id 2
ptr 0x196b828
id 3
ptr 0x196b84c
id 4
ptr 0x196b870
id 5
ptr 0x196b894
id 6
ptr 0x196b8b8
id 7
ptr 0x196b8dc
id 8
ptr 0x196b900
id 9

Go - cgo访问C数组 内存相关推荐

  1. Java04-day04【IDEA(概述、启动配置、项目结构、内容辅助键、快捷键、模块操作)、数组(定义详解、动态初始化、访问)、内存分配、数组内存图】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料:[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] &qu ...

  2. 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

    文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...

  3. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

    文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...

  4. cuda二维数组内存分配和数据拷贝

    uda二维数组内存分配和数据拷贝 2016-04-20 10:54 138人阅读 评论(0) 收藏 举报 分类: 机器学习(11) 人工智能(9) 版权声明:本文为博主原创文章,允许转载. 因为cud ...

  5. java 数组 内存_图解Java数组的内存分配

    1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态初始化:显式指定每个数组元素的初始值,系统决定数组长度 String[] books ...

  6. 是否可以在其范围之外访问局部变量的内存?

    我有以下代码. <code>#include <iostream>int * foo() {int a = 5;return &a; }int main() {int* ...

  7. 如何访问固定的内存位置?

    访问固定的内存位置(Accessing fixed memory locations) [提问] 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点.在某工程中,要求设置一绝对地址为0x67a9 ...

  8. Java10-day01【继承(变量-构造方法访问-成员方法 访问)、super内存图、方法重写、继承、包、import、权限修饰符、final、static】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  9. GNU C - 关于8086的内存访问机制以及内存对齐(memory alignment)

    接着前面的文章,这篇文章就来说说menory alignment -- 内存对齐. 一.为什么需要内存对齐? 无论做什么事情,我都习惯性的问自己:为什么我要去做这件事情? 是啊,这可能也是个大家都会去 ...

  10. C语言 数组内存溢出 - C语言零基础入门教程

    目录 一.数组内存溢出简介 二.数组内存溢出实例 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.数组内存溢出简介 溢出:想象一个桶, ...

最新文章

  1. ClassCastException
  2. SQL2008安装后激活方式以及提示评估期已过解决方法(转)
  3. Yii2 配置 Nginx 伪静态
  4. 进程间通信-共享内存实例
  5. 吴恩达 coursera ML 第六课总结+作业答案
  6. 浅谈async、await关键字 = 深谈async、await关键字
  7. 1. 定义方法,求出指定元素在数组中出现的次数.
  8. 拿来就能用!如何用 AI 算法提高安全运维效率? | 技术头条
  9. es的master选举摘要
  10. c语言超声波壁障源码,【图片】超声波避障小车源程序【精】【单片机吧】_百度贴吧...
  11. html转到百度的链接,简易制作百度跳转链接
  12. android studio模拟器闪一下,android studio连接雷电模拟器 【AS 模拟器】
  13. SuperMemo POJ - 3580
  14. 电脑ppt录制微课软件哪个好 电脑ppt录制微课的方法
  15. 【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)
  16. 把Excel数据填充word模板生成多份word文档
  17. java中形参和实参的区别
  18. pyqt5 制作壁纸切换工具实例 第一章
  19. 电脑公司 雨林.番茄.深度.龙帝国.系统之家.系统光盘收录大全
  20. Logi-KafkaManager安装

热门文章

  1. AS1.3 及其以上预览版新插件-实验版(NDK)
  2. 爬楼梯算法-java(递归与非递归)
  3. Android自动清理无用资源工具
  4. vue组件中传值遇到的一些问题
  5. Ajax学习笔记-运行原理及实现-2
  6. java程序员选择多个offer时需要看重哪些?_27 道阿里巴巴 Java 面试题,你会几道?...
  7. linux single 禁用显卡,告诉你Ubuntu下禁用独显的方法及命令
  8. android studio 工程rebuild没反应,Andriod Studio Clear Project或Rebuild Project出错
  9. preg_match 参数获取两个_摄像相机标定到底是啥?标定完成得到的参数有什么用?...
  10. 同济大学c语言程序设计答案,2020年同济大学道路与铁道工程考研真题试卷及试题答案,汽车理论及设计考研试题下载...