Triple pointeurs en C: est-ce une question de style?

J'ai envie de triple pointeurs en C sont considérés comme "mauvais". Pour moi, il est logique d'utiliser à la fois.

À partir de la base, les seul pointeur a deux objectifs: créer un tableau, et pour permettre une fonction pour modifier son contenu (passage par référence):

char *a;
a = malloc...

ou

void foo (char *c); //means I'm going to modify the parameter in foo.
{ *c = 'f'; }

char a;
foo(&a);

La double pointeur peut être un tableau 2D (ou tableau de tableaux, puisque chaque "colonne" ou "ligne" n'a pas besoin d'être de la même longueur). Personnellement, j'aime l'utiliser quand j'en ai besoin pour passer un tableau 1D:

void foo (char **c); //means I'm going to modify the elements of an array in foo.
{ (*c)[0] = 'f'; }

char *a;
a = malloc...
foo(&a);

Pour moi, qui permet de décrire ce que toto est en train de faire. Cependant, il n'est pas nécessaire:

void foo (char *c); //am I modifying a char or just passing a char array?
{ c[0] = 'f'; }

char *a;
a = malloc...
foo(a);

fonctionnera également.

Selon la première réponse à cette question, si foo ont été de modifier la taille du tableau, un double pointeur serait nécessaire.

On peut clairement voir comment un triple pointeur (et au-delà, vraiment) serait nécessaire. Dans mon cas, si j'étais le passage d'un tableau de pointeurs (ou tableau de tableaux), je voudrais l'utiliser. Bien entendu, il serait nécessaire si vous êtes de passage dans une fonction qui est en train de changer la taille d'un tableau multi-dimensionnel. Certainement un tableau de tableaux de tableaux n'est pas trop commun, mais les autres cas sont.

Alors, quelles sont certaines des conventions de là-bas? Est-ce vraiment juste une question de style et la lisibilité combiné avec le fait que beaucoup de gens ont un moment difficile de l'emballage de leurs têtes autour de pointeurs?

  • Est-ce que c'rare de créer un double pointeur vers un type opaque (ce qui pourrait être un pointeur lui-même)? c'est à dire typedef struct foo *foo_t; puis plus tard sur foo_t **bar
  • Regardez comment un pointeur vers un pointeur peut être un unique "vendre" le point de C (par rapport à Java et autres): stackoverflow.com/questions/18373657/...
  • Ce livre se lit comme un blog, pas une question, StackOverflow n'est pas un endroit idéal pour l'affichage des essais plaider en faveur ou à l'encontre notamment des techniques de programmation.
  • De plus: si j'avais été à "commencer à partir de la base" concernant les pointeurs, leur relation à des tableaux n'est pas quelque chose que je considère comme fondamentaux. L'objectif fondamental d'un pointeur est de permettre la manipulation des emplacements de stockage de données. Que certains de ces emplacements de stockage se trouvent être des tableaux de particulier arité est un détail intéressant, mais pas fondamentaux.
  • En utilisant typedef, code de réduire le nombre de * dans une variable ou d'un paramètre de déclaration. foo(bar *a) présente bien des a comme un pointeur de type bar, même si typedef int **** bar. Suggèrent 3+ * devrait toujours être évitée et 2 * seulement utilisé dans certains situations.
  • Je vais voter pour le style et la lisibilité et ajouter comment c'est facile de faire des erreurs; au meilleur de ma connaissance, je pense que j'ai seulement vu un triple pointeur deux fois dans ma vie - dans la définition de scandir, et la source du traditionnel vi (l'un est la cause de chaînes C étant des pointeurs)
  • une question qui se pose est que il n'y a pas des tableaux alloués dynamiquement dans C (vous devez utiliser un pointeur, puis l'adresse comme vous le feriez d'un tableau). Comme le titre l'indique c'est une question de style; devrait triple (et plus) des pointeurs être utilisées, si elles permettent de mettre en évidence un allouée dynamiquement tableau 2D (par exemple) va être modifié par une fonction. Est-il un autre notation pour passer un n-dimensions tableau dont les dimensions ne sont pas connues au moment de la compilation?
  • StackOverflow est un endroit idéal pour mettre de l'information, de la période. Je me suis poser une question, bien que moins pratique. Encore, beaucoup de ces questions (même les moins populaires sont ceux qui apparaissent sur les résultats de la recherche et d'aider les gens.

InformationsquelleAutor darda | 2014-01-31