byref 并不会构造一个指针对象,因此速度比 pointer 快,只能作为导出函数的实参使用。其 _obj 是只读属性,不能更改。

pointer 会构造一个指针对象。.contents 属性即其所指的对象,但是指向是能够变动的。相当于

int *ptr = n;
ptr = &m;  //指向可以变化

对于一个包含如下函数,名为 lib.so 动态库:

void change(float* ptr, float value)
{*ptr = value;
}

ptr.contents 更改指针的指向,change 函数调用后,c的值并没有变化,变化的是 ptr.contents 的值。

ctypes.addressof 返回 C 实例的地址,可以查看区别:

ctypes.addressof(ptr.contents)ctypes.addressof(c) 

POINTER 返回类型对象,用来给 restype 和 argtypes 指定函数的参数和返回值的类型用。

ctypes.POINTER(ctypes.c_float) == type(ptr)  #True ptr的类型可通过 POINTER 获得

如果不指定,默认的类型都将被当做是整形。实参类型(除了 None,integer,stringbytes,可隐式转换)和返回值的类型用 ctypes.c_ 系列类型显示的指定。(见ctypes 文档:None, integers, bytes objects and (unicode) strings are the only native Python objects that can directly be used as parameters in these function calls.)

实际上,最终得到的返回结果的类型已经由显示指定的ctypes.c_ 类型,转化为了对应的 python 类型。比如指定 .restype = c_char_p,函数的返回值的类型将是 bytes 类型。

根据 ctypes 官方文档的描述:ctypes实例由一个内存块和若干描述符构成,描述符用来访问内存块。内存块并不保存 python 对象,而仅仅保存 python 对象的内容。外部访问保存的内容时,都会构造一个新的 python 对象。

所以

c_instanc.value is c_instanc.value   #False
c_instance.content is c_instance.content  #False

ctypes 指针类型 byref pointer POINTER相关推荐

  1. Go基础:指针地址、指针类型、多重指针、指针运算

    目录 到底什么是指针呢? 指针 指针地址和指针类型 指针取值 指针变量初始化 指针运算符 多重指针 指针运算 到底什么是指针呢? 内存就是一系列有序列号的存储单元,变量就是编译器为内存地址分配的昵称, ...

  2. C 语言编程 — 指针类型 — 指针(pointer)

    目录 文章目录 目录 值语义与引用语义 指针的定义 变量指针与指针变量 使用 int* i 还是 int *i ? 取值运算符与取址运算符 指针的种类 双重指针 空指针 悬空指针 野指针 整数指针 指 ...

  3. 框架指针省略(Frame Pointer Omission)(FPO)

    框架指针省略(Frame Pointer Omission)(FPO) FPO是一种优化,它压缩或者省略了在栈上为该函数创建框架指针的过程.这个选项加速了函数调用,因为不需要建立和移除框架指针(ESP ...

  4. 常量指针(Pointer to const)与指针常量(Const pointer)

    常量指针(Pointer to const)与指针常量(Const pointer) 1. Concepts 很多时候对于这两个概念的困惑来自于中文字面翻译.我们无法通过字面含义直接理解判断该'常量' ...

  5. linux 从不兼容的指针类型,警告:从不兼容的指针类型初始化

    大家好,我已经触摸C了,所以我真的生锈了.我写了一个小程序来创建一个使用两个动态数组的矩阵.但是,我收到这个警告,我不明白为什么?我想我不太清楚指向指针的指针.有人能帮我指出我的问题在哪里吗?谢谢.警 ...

  6. C语言边角料:结构体中指针类型的成员变量,它的类型重要吗?

    一.前言 昨天在编译代码的时候,之前一直OK的一个地方,却突然出现了好几个 Warning! 本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部, 指向结构体类型的指针成员变量导致的问题. 这个 ...

  7. python中的记录指针_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...

    使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...

  8. golang中值类型/指针类型的变量区别总结

    转自:https://segmentfault.com/a/1190000012329213 值类型的变量和指针类型的变量 先声明一个结构体: type T struct {Name string } ...

  9. python结构体数组传出接收c动态库_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...

    使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...

  10. 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针

    文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...

最新文章

  1. 《火星救援VR》原班人马打造全新AR游戏,让可爱小飞龙伴随你左右
  2. 淘宝技术发展(Java时代:脱胎换骨)
  3. get_attribute中的value是什么类型的?_建设工程项目中都有什么类型的监理?
  4. 用Java分割大型XML文件
  5. linux mysql插入数据乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题
  6. 如何使一个你没有源代码的DLL文件变为强命名的DLL
  7. cad化工设备绘图_化工设备CAD绘图技巧
  8. 高等数学学习笔记——第九十五讲——函数的幂级数展开
  9. linux系统压缩zip,linux系统压缩zip命令详解
  10. Unity | 实现粘贴、复制功能
  11. 行杂记之Zookeeper SessionTimeOut分析
  12. 自动化测试的三种测试报告模板
  13. 仪器分析和计算机,化学分析和仪器分析的区别
  14. 通俗理解卡尔曼滤波(无人驾驶感知融合的经典算法)
  15. 怎样将PPT文件进行压缩?这几步很简单
  16. 太阳能手机充电器设计
  17. 华为云鲲鹏云服务抢占云上多元算力新赛道
  18. Roboware studio字体断续问题
  19. undefined reference to `vtkRenderingVolumeOpenGL_AutoInit_Destruct()',`vtkRenderingVolumeOpenGL_Auto
  20. 乐聊----java界面聊天室

热门文章

  1. 如何使用 AVIF 图片格式
  2. 2013 acm 东北四省赛 总结
  3. Java8新特性 方法引用(三)
  4. matlab数学建模-非线性规划(无约束规划、有约束规划)
  5. 强化理解指针、指针数组和数组指针(从三味书屋到成华大道)
  6. python解压带密码的rar文件_Python实现加密的RAR文件解压的方法(密码已知)
  7. qq空间自动评论说说php源码使用教程,仿QQ空间说说 评论/回复 效果源码
  8. 计算机找不到wf连接,笔记本wifi功能消失了 电脑wifi连接没了 电脑的wifi不见了...
  9. win 64 安装 sql server 2000、出现挂起 解决
  10. Zynga公布2019年第三季度财务业绩