微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

指针偏移量是否指向 cython 指针?

如何解决指针偏移量是否指向 cython 指针?

有没有办法可以在 Cython 中将指针移动到 n 个字节之后?

例如,如果我有(伪代码):

cdef void *n_ary 
cdef void *eightbytes 
cdef void *n_ary_plus8

ary = cnp.PyArray_DATA(input_array)
eightbytes = 8
n_ary_plus8 = ary + eightbytes

最后一行出现错误 Invalid operand types for '+' (void *; void *),告诉我它不知道如何添加指针地址 ary 和指针八字节。看起来这应该是显而易见的,但我在手册或八月参考中找不到任何内容

解决方法

void* 算术在 C 和 C++ 标准中是不允许的。 如果要这样做,则需要将指针转换为 char* 类型。

有关详细信息,请查看 thisthis。使用此类指针转换(填充和对齐)要非常小心 strict aliasing rule

,

我能够做我需要做的事情

cdef void *n_ary 
cdef int eightbytes 
cdef void *n_ary_plus8

ary = cnp.PyArray_DATA(input_array)
eightbytes = 8
n_ary_plus8 = &ary[eightbytes]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。