ここで質問#3367795を解決するために、多くの副問題に対処する必要があります。これらの1つは次のとおりです。上記のアルゴリズム(レーベンシュタイン距離)では、いくつかの配列がメモリに割り当てられ、次の行で初期化されます
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
bytes
ここでは、Python変数の長さを参照します。今、私がアルゴリズムを理解している限り(完全なコードについては私の元の投稿を参照してください)、初期化のコードがm2
明確に示すように、これらの配列は文字ではなく整数を保持することを意図しているため、正しい割り当てはお気に入り
cdef int *m3 = <int *>malloc( ( blen + 2 ) * sizeof( int ) )
等々。C のバックグラウンドを持つ人は、なぜchar
が使用されているのかを説明できますか? また、おそらく Cython に傾倒している人々にとっては、キャストがあるのはなぜ<char *>
ですか? char *x = malloc( ... )
を定義するのに十分なはずだと思うでしょうx
。