Exemple pourquoi quelqu’un devrait utiliser des pointeurs sortingples en C / C ++?

Je cherche un exemple ou une explication pourquoi quelqu’un devrait utiliser OU ne pas utiliser les pointeurs sortingples en C / C ++. Existe-t-il un code source d’où surgit le sortingple pointeur?

Merci d’avance.

Edit: Je recherche en particulier un code source utilisant des pointeurs sortingples.

Le meilleur exemple qui me vienne à l’esprit est un tableau fragmenté à plusieurs niveaux. Par exemple, un moyen d’implémenter des propriétés pour les caractères Unicode pourrait être:

 prop_type ***proptable; ... prop_type prop = proptable[c>>14][c>>7&0x7f][c&0x7f]; 

Dans ce cas, proptable devrait avoir un type à trois pointeurs (et éventuellement un pointeur à quatre points si le type final résultant est un type de pointeur). Cela s’explique par le fait que plusieurs niveaux sont utilisés plutôt que par un seul tableau plat, car aux premier et deuxième niveaux, plusieurs entrées peuvent pointer vers la même sous-table lorsque le contenu est identique (par exemple, de grandes plages CJK).

Voici un autre exemple de tableau à plusieurs niveaux que j’ai implémenté; Je ne peux pas dire que je suis terriblement fier du design, mais compte tenu des contraintes imposées par le code, c’est l’un des choix les moins dommageables pour la mise en œuvre:

http://git.musl-libc.org/cgit/musl/tree/src/aio/aio.c?id=56fbaa3bbe73f12af2bfbbcf2adb196e6f9fe264

Si vous devez renvoyer un tableau de pointeurs sur des chaînes de longueur variable via un paramètre de fonction:

 int array_of_ssortingngs(int *num_ssortingngs, char ***ssortingng_data) { int n = 32; char **pointers = malloc(n * sizeof(*pointers)); if (pointers == 0) return -1; // Failure char line[256]; int i; for (i = 0; i < n && fgets(line, sizeof(line), stdin) != 0; i++) { size_t len = strlen(line); if (line[len-1] == '\n') line[len-1] = '\0'; pointers[i] = strdup(line); if (pointers[i] == 0) { // Release already allocated resources for (int j = 0; j < i; j++) free(pointers[j]); free(pointers); return -1; // Failure } } *num_strings = i; *string_data = pointers; return 0; // Success } 

Code compilé.

Si vous utilisez une liste chaînée, vous devez stocker l’adresse du premier élément de la liste ( first pointer ) .

Si vous avez besoin de changer dans cette liste, vous avez besoin d’un autre pointeur ( two pointer)

Si vous devez passer votre liste que vous modifiez en deux pointeurs et la changer dans une autre fonction, vous avez besoin d’un autre pointeur ( three pointer )

Ils sont un bon nombre d’exemples

J’ai utilisé des pointeurs sortingples en C ++:

Il existe une interface écrite pour un programme Java:

https://github.com/BenLand100/SMART/blob/master/src/SMARTPlugin.h

et il faut un tableau de chaînes.

 typedef void (*_SMARTPluginInit)(SMARTInfo *ptr, bool *replace, int *buttonc, char ***buttonv, int **buttonid, _SMARTButtonPressed *buttonproc); 

Puis dans mon programme je fais:

 char* btnTexts[2] = {"Disable OpenGL_Enable OpenGL", "Enable Debug_Disable glDebug"}; //array of C-style ssortingngs. void SMARTPluginInit(SMARTInfo* ptr, bool* ReplaceButtons, int* ButtonCount, char*** ButtonTexts, int** ButtonIDs, _SMARTButtonPressed* ButtonCallback) { *ButtonText = btnTexts; //return an array of ssortingngs. } 

mais en C ++, vous pouvez utiliser une référence au lieu d’un pointeur et il deviendrait:

 void SMARTPluginInit(SMARTInfo* ptr, bool* ReplaceButtons, int* ButtonCount, char** &ButtonTexts, int** ButtonIDs, _SMARTButtonPressed* ButtonCallback) { ButtonText = btnTexts; //return an array of ssortingngs. } 

Notez maintenant que “ButtonTexts” est une référence à un tableau de chaînes de style C.

Un caractère char*** peut être un pointeur sur un tableau de chaînes de style C et c’est la première fois que vous l’utiliseriez.

Un exemple très simple est un pointeur sur un tableau de tableaux de tableaux.

Triple pointeur est une variable de pointeur qui pointe vers un pointeur qui à son tour pointe vers un autre pointeur. L’utilisation de cette technique de programmation complexe est celle dans laquelle les entresockets traitent des tonnes et des tonnes de données à la fois. Un seul pointeur pointerait vers un seul bloc de données (supposer dans un fichier volumineux) utilisant traitement plus rapide car différents blocs de données (dans le même fichier) peuvent être pointés par un pointeur différent et ainsi les données peuvent être consultées / traitées plus rapidement (contrairement à 1 pointeur parcourant le fichier entier).