Comment fonctionne cet algorithme reverseSsortingng?

J’ai vu cet algorithme pour inverser une chaîne en ligne et j’ai quelques doutes à ce sujet que je spécifierai à la fin du code:

void reverseSsortingng(char *original_ssortingng) { char *end = original_ssortingng; char tmp; if(original_ssortingng) { while(*end) { ++end; } --end; while (original_ssortingng < end) { tmp = *original_string; *original_string++ = *end; *end-- = tmp; } } //This line doesn't have the complete reversed string. Why? printf("%s\n", original_string); } 

1) Dans la boucle while … Pourquoi comparons-nous deux pointeurs? Comment soaps-nous que la valeur va être plus grande ou plus petite ?? Ce ne sont que des indicateurs, non?

2) Pourquoi ne rendons-nous rien? Où est la chaîne inversée? Si nous déclarons que la chaîne inversée est dans la chaîne originale, ne devrions-nous pas utiliser un pointeur à pointeur pour que les effets se trouvent dans la scope externe?

3) Si je fais ce qui suit:

 char test[] = "hello"; reverseSsortingng(test); printf("%s\n", test); 

Je peux voir le “olleh”. Cependant, si je ne fais pas printf("%s\n", original_ssortingng); à la toute dernière ligne de la fonction reverseSsortingng, je viens d’obtenir “leh”. Pourquoi donc?

Les deux pointeurs pointant vers le début et la fin de la section doivent être inversés. À chaque étape, vous permutez les caractères pointés par ces pointeurs, puis vous diminuez la chaîne qu’il rest à inverser dans les deux sens (début et fin). La comparaison des pointeurs a la signification suivante: jusqu’à ce que le début de l’intervalle ne se situe pas après la fin de l’intervalle, il rest un intervalle à inverser. J’espère que cela a du sens.

Il n’est pas nécessaire de renvoyer quoi que ce soit – la chaîne est inversée, l’argument est donc entré et sorti en même temps.

3) Dans la fonction, vous prenez une copie du pointeur sur la chaîne, que vous modifiez au cours de son exécution, de sorte que le pointeur est modifié par la dernière ligne, il ne pointe plus au début de la chaîne, mais au milieu, où il est laissé à la fin.