Go - cgo访问C数组 内存
示例
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数组 内存相关推荐
- Java04-day04【IDEA(概述、启动配置、项目结构、内容辅助键、快捷键、模块操作)、数组(定义详解、动态初始化、访问)、内存分配、数组内存图】
java零基础入门到精通(2019版)[黑马程序员] 视频+资料:[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] &qu ...
- 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )
文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...
- 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )
文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...
- cuda二维数组内存分配和数据拷贝
uda二维数组内存分配和数据拷贝 2016-04-20 10:54 138人阅读 评论(0) 收藏 举报 分类: 机器学习(11) 人工智能(9) 版权声明:本文为博主原创文章,允许转载. 因为cud ...
- java 数组 内存_图解Java数组的内存分配
1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态初始化:显式指定每个数组元素的初始值,系统决定数组长度 String[] books ...
- 是否可以在其范围之外访问局部变量的内存?
我有以下代码. <code>#include <iostream>int * foo() {int a = 5;return &a; }int main() {int* ...
- 如何访问固定的内存位置?
访问固定的内存位置(Accessing fixed memory locations) [提问] 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点.在某工程中,要求设置一绝对地址为0x67a9 ...
- Java10-day01【继承(变量-构造方法访问-成员方法 访问)、super内存图、方法重写、继承、包、import、权限修饰符、final、static】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
- GNU C - 关于8086的内存访问机制以及内存对齐(memory alignment)
接着前面的文章,这篇文章就来说说menory alignment -- 内存对齐. 一.为什么需要内存对齐? 无论做什么事情,我都习惯性的问自己:为什么我要去做这件事情? 是啊,这可能也是个大家都会去 ...
- C语言 数组内存溢出 - C语言零基础入门教程
目录 一.数组内存溢出简介 二.数组内存溢出实例 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.数组内存溢出简介 溢出:想象一个桶, ...
最新文章
- ClassCastException
- SQL2008安装后激活方式以及提示评估期已过解决方法(转)
- Yii2 配置 Nginx 伪静态
- 进程间通信-共享内存实例
- 吴恩达 coursera ML 第六课总结+作业答案
- 浅谈async、await关键字 = 深谈async、await关键字
- 1. 定义方法,求出指定元素在数组中出现的次数.
- 拿来就能用!如何用 AI 算法提高安全运维效率? | 技术头条
- es的master选举摘要
- c语言超声波壁障源码,【图片】超声波避障小车源程序【精】【单片机吧】_百度贴吧...
- html转到百度的链接,简易制作百度跳转链接
- android studio模拟器闪一下,android studio连接雷电模拟器 【AS 模拟器】
- SuperMemo POJ - 3580
- 电脑ppt录制微课软件哪个好 电脑ppt录制微课的方法
- 【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)
- 把Excel数据填充word模板生成多份word文档
- java中形参和实参的区别
- pyqt5 制作壁纸切换工具实例 第一章
- 电脑公司 雨林.番茄.深度.龙帝国.系统之家.系统光盘收录大全
- Logi-KafkaManager安装
热门文章
- AS1.3 及其以上预览版新插件-实验版(NDK)
- 爬楼梯算法-java(递归与非递归)
- Android自动清理无用资源工具
- vue组件中传值遇到的一些问题
- Ajax学习笔记-运行原理及实现-2
- java程序员选择多个offer时需要看重哪些?_27 道阿里巴巴 Java 面试题,你会几道?...
- linux single 禁用显卡,告诉你Ubuntu下禁用独显的方法及命令
- android studio 工程rebuild没反应,Andriod Studio Clear Project或Rebuild Project出错
- preg_match 参数获取两个_摄像相机标定到底是啥?标定完成得到的参数有什么用?...
- 同济大学c语言程序设计答案,2020年同济大学道路与铁道工程考研真题试卷及试题答案,汽车理论及设计考研试题下载...