Cython:将指针传递给函数中的指针,采用 void **

用户3758232

我正在尝试编写一个函数,该函数在某些条件下将指向结构的指针更改为指向不同的结构。

我的约束是我想保留初始函数签名,该签名将指向指针(而不是特定结构类型)的通用指针作为参数。

这行不通:

[nav] In [5]: %%cython -f 
         ...: ctypedef struct A: 
         ...:     int x 
         ...:     int y 
         ...:  
         ...: cdef fn(void **m): 
         ...:     # Arbitrary code that changes m[0] to point to another structure
         ...:     pass
         ...:      
         ...: cdef A a 
         ...: cdef A *ap = &a 
         ...: a.x = 2 
         ...: a.y = 3 
         ...: print(ap.x) 
         ...: fn(&ap) 
         ...: print(ap.x) 

Error compiling Cython file:
------------------------------------------------------------
...
cdef A a
cdef A *ap = &a
a.x = 2
a.y = 3
print(a.x)
fn(&ap)
  ^
------------------------------------------------------------

/home/me/.cache/ipython/cython/_cython_magic_3c3902694eafae18c66cb761d4a6b210.pyx:20:3: Cannot assign type 'A **' to 'void **'

我想这是因为即使我可以编写一个将 avoid *作为参数并自动将任何传递的指针强制转换为a 的函数void *,它也不能与指向 void 指针的指针一起使用,对吗?

如果是这样,我如何传递我的结构指针指针,以便ap可以指向不同的结构?

谢谢。

编辑:

进一步阅读后,我意识到这是一个 C 架构“特性”。这篇有用的文章给出了一些简要说明:

关于指向指针的指针和内存分配的一个观点:尽管由void *返回类型malloc是“通用指针”,适用于分配给任何类型的指针或从任何类型的指针分配,但假设类型void **不是“指向指针的通用指针”。我们的allocstr示例只能用于分配指向 char 的指针。不可能使用通过指针间接返回通用指针的函数void **,因为当您尝试使用它时,例如通过声明和调用

double *dptr;
if(!hypotheticalwrapperfunc(100, sizeof(double), &dptr))
    fprintf(stderr, "out of memory\n");

你不会通过一个void **,而是一个double **.

我认为此时我可以做的是在我的函数签名中指定数据类型,或者返回新分配的值?

用户3758232

我通过传递函数要求的内容来解决,即 a void **,然后在我需要它时投射它:

[nav] In [5]: %%cython -f 
         ...: ctypedef struct A: 
         ...:     int x 
         ...:     int y 
         ...:  
         ...: cdef fn(void **m): 
         ...:     # Arbitrary code that changes m[0] to point to another structure
         ...:     pass
         ...:      
         ...: cdef A a 
         ...: cdef void *avp = <void *>&a
         ...: cdef A *ap = <A*>avp
         ...: a.x = 2 
         ...: a.y = 3 
         ...: print(ap.x) 
         ...: fn(&ap)
         ...: ap = <A*>avp # Must reassign
         ...: print(ap.x) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将指针传递给成员函数作为void *函数的参数

来自分类Dev

C将void指针数组传递给函数

来自分类Dev

如何查看传递给函数的函数指针是否返回 void?

来自分类Dev

如何将函数对象传递给需要void *指针的函数

来自分类Dev

将指向函数的指针存储在void *中

来自分类Dev

Cython:如何在struct中公开void *和函数指针?

来自分类Dev

Cython:如何在struct中公开void *和函数指针?

来自分类Dev

函数参数中的void指针

来自分类Dev

函数参数中的void指针

来自分类Dev

带指针的void函数

来自分类Dev

指向void函数的指针

来自分类Dev

将void指针作为参数传递

来自分类Dev

void **指针和void * []作为函数参数

来自分类Dev

void **函数参数c ++中的指针

来自分类Dev

获取C中的void(*)()函数指针的sizeof

来自分类Dev

将结构传递给采用 void* 类型变量的回调

来自分类Dev

使用void *指针将未知/混合类型传递给printf()(在运行时推断类型)

来自分类Dev

将void(object,DataReceivedEventArgs)传递给函数

来自分类Dev

将double形式(void *)传递给函数

来自分类Dev

C ++将args传递给void函数

来自分类Dev

类型Void函数处理的指针

来自分类Dev

函数指针 IAR ( typedef void )

来自分类Dev

修改cpp中的void指针

来自分类Dev

修改cpp中的void指针

来自分类Dev

从void双指针数组输出void指针

来自分类Dev

将唯一指针的指针传递给采用双指针的函数

来自分类Dev

Python 在传感器的 DLL 中调用 SDK 函数,该函数采用指针 IP 和端口并返回 void*(void* 配置文件传感器的句柄。)

来自分类Dev

函数指针将参数强制转换为 void

来自分类Dev

在OpenGL中,为什么glVertexAttribPointer要求将“指针”参数作为void *传递?

Related 相关文章

热门标签

归档