【发布时间】:2010-07-31 21:07:51
【问题描述】:
为了解决问题#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 这里指的是 Python bytes 变量的长度。现在据我了解算法(完整代码请参阅我的原始帖子)以及m2 的初始化代码清楚地表明,这些数组旨在保存整数,而不是字符,所以人们会认为是正确的分配应该看起来像
cdef int *m3 = <int *>malloc( ( blen + 2 ) * sizeof( int ) )
等等。任何有 C 语言背景的人都可以向我解释为什么使用 char 吗?另外,对于喜欢 Cython 的人来说可能更多,为什么会有演员 <char *>?有人会认为char *x = malloc( ... ) 应该足以定义x。
【问题讨论】: