dans un effort pour résoudre la question #3367795 ici sur SO je dois faire face à un certain nombre de sous-problèmes. l'un d'eux est: dans ledit algorithme (distance de Levenshtein), plusieurs matrices sont attribuées dans la mémoire et initialisé avec les lignespourquoi ces tableaux C/Cython sont-ils définis en tant que tableaux de caractères et non en nombres entiers?
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
ici se réfère à la longueur d'une variable Python bytes
. maintenant pour autant que je comprends l'algorithme (voir mon message original pour le code complet) et que le code pour l'initialisation de m2
montre clairement, ces tableaux sont destinés à contenir des nombres entiers, pas de caractères, donc on pourrait penser que les allocations correctes devraient ressembler à
cdef int *m3 = <int *>malloc((blen + 2) * sizeof(int))
et ainsi de suite. Quelqu'un peut-il avoir une expérience en C élucider à moi pourquoi char
est utilisé? aussi, peut-être plus pour les gens enclins à Cython, pourquoi y a-t-il un casting <char *>
? on pourrait penser que char *x = malloc(...)
devrait suffire pour définir x
.
thx; Ton commentaire ne m'est pas visible. J'ai ajouté une modification pour répondre à ce point. – flow
@flow: Il est visible pour vous (1) à la fin des commentaires vous verrez "show 1 more comment" (2) vous auriez été averti d'un nouveau commentaire par l'icône de petite enveloppe en haut de la page à côté de votre nom étant surlignée –
vous avez raison. C'est tellement subtil. – flow