为了解决这里的问题#3367795,我必须处理一些子问题。其中之一是:在所述算法(levenshtein distance)中,在内存中分配了几个数组并用行初始化
cdef char *m1 = <char *>calloc( blen + 2, sizeof( char ) )
cdef char *m2 = <char *>calloc( blen + 2, sizeof( char ) )
cdef char *m3 = <char *>malloc( ( blen + 2 ) * sizeof( char ) )
#.........................................................................
for i from 0 <= i <= blen:
m2[ i ] = i
<...snip...>
blen
这里指的是 Pythonbytes
变量的长度。现在据我了解算法(完整代码请参阅我的原始帖子)以及初始化代码m2
清楚地表明,这些数组旨在保存整数,而不是字符,因此人们会认为正确的分配应该看起来像
cdef int *m3 = <int *>malloc( ( blen + 2 ) * sizeof( int ) )
等等。任何有 C 背景的人都可以向我解释为什么char
要使用吗?另外,对于倾向于 Cython 的人来说可能更多,为什么会有演员表<char *>
?有人会认为这char *x = malloc( ... )
足以定义x
.