2011-08-26 5 views
2

J'ai un pointeur sur un tableau de Ts:Comment déclarer un pointeur sur un pointeur vers un tableau?

T (*anArray)[]; // A pointer to an array of Ts. 

Comment puis-je déclarer un pointeur vers un pointeur sur un tableau de Ts? (Par exemple un pointeur au-dessus..)

Est-il:

T (**anArray)[]; 

ou

T *(*anArray)[]; 

ou

T (*anArray)*[]; 

ou autre chose?

Merci,

Alf

+4

http://cdecl.org/?q=declare+anArray+as+pointer+to+pointer+to+array+5+of+ int – Cubbi

+2

Avez-vous testé un de ces produits? –

+1

Existe-t-il même un pointeur vers un tableau de borne inconnue? – fredoverflow

Répondre

3

Le premier - T(**anArray)[];

+0

vous avez besoin des parenthèses, sinon c'est un tableau de pointeur vers un pointeur, voir [cdecl] (http://cdecl.ridiculousfish.com/?q=int+%2A%2AanArray%5B5%5D). un peu d'arrière-plan et l'explication du "pourquoi" serait gentil :) – knittl

1

T *(*anArray)[]; ->anArray est pointeur sur un tableau de pointeurs T

T (**anArray)[]; ->anArray est pointeur vers pointeur sur un tableau de T

+0

la dernière forme est la syntaxe non valide et ne pas compiler – knittl

+0

@knittl vous avez raison * grins * –

0

Ouvrir cdecl.org puis copier-coller ce qui suit à la zone de texte:

  • declare a as pointer to pointer to array 10 of int

Sur coller, il vous dit ce que cela signifie en C++. Eh bien, il est le suivant:

  • int (**a)[10]

Je suis sûr que est ce que vous cherchez? Jouez avec le lien plus. Vous apprendrez plus de syntaxes, et comment le dire en mots.

0

Voici un bon moyen de trouver comment faire des combinaisons inhabituelles de pointeurs: commencez par le nom de la variable, regardez à droite sans croiser les parenthèses, regardez à gauche, répétez. Dites ce que vous voyez dans l'ordre où vous le voyez.

Pour un pointeur vers un pointeur vers un tableau nous avons

int (**a)[5] 

Commencez par un. Nous regardons bien, mais il y a un parent, alors regardez à gauche. Ok, nous voyons "*", donc c'est un pointeur. Maintenant, nous regardons à nouveau à droite ... encore une paren, alors revenons à gauche. Un autre "*", donc c'est un pointeur vers un pointeur. Regardez à droite, paren, regardez à gauche, paren, alors maintenant nous pouvons sauter hors des parenthèses. Maintenant nous voyons des parenthèses, ainsi nous avons un pointeur vers un pointeur vers un tableau. Enfin, regardez tout le chemin à gauche et nous voyons int. Pointeur vers un pointeur vers un tableau de int s.

1

La réponse à votre question est que les pointeurs supplémentaires en dehors de la parenthèse sont appliquées au type contenu dans le tableau, tandis que, entre parenthèses, ils sont appliqués au type de la variable elle-même:

int (*array)[10]; // pointer to array of 10 int 
int *(*array)[10]; // pointer to array of 10 pointer to int 
int (**array)[10]; // pointer to pointer to array of 10 int 

mais le meilleur conseil est d'éviter les problèmes et l'utilisation typedefs:

typedef int array_t[10]; 
array_t **variable;  // pointer to pointer to array of 10 integers 
Questions connexes