Si je peux passer dans un tableau d'une taille connue: Pourquoi ne pouvez-je pas renvoyer un: p> ici , le ")" in "(*)" génère une erreur de syntaxe :) ". p> p>
3 Réponses :
Vous pouvez retourner int ** code> p>
Ou annuler *. Les deux ont autant d'informations sur la taille de la matrice.
Le puisque c'est une syntaxe très obscure , enclin à être déroutant pour tout le monde qui le lit, je recommanderais de retourner la matrice comme un simple Vous pouvez également simplifier la définition de la fonction avec un TypeDEF: P> [4] code> passe après le nom de la fonction, comme si cela va après le nom de la variable dans une définition variable: int * code> si vous n'avez pas de raison particulière pour laquelle il doit être un pointeur-to- Array. P> typedef int intarray_t[4];
intarray_t* fn() { ... }
@Will: Cela fonctionne avec GCC V3.4.3 et V4.4.1, ainsi qu'avec Sun cc v5.9, alors je dirais que c'est un problème avec ces compilateurs en ligne.
Vous pouvez utiliser Typedef pour faciliter les problèmes de syntaxe. Mais vraiment, vous feriez mieux de retourner int **, voire int *.
@Abadiy: Vous retournez un pointeur à un tableau de quatre INTS?
C'est ce que j'étais après - merci. Je n'ai aucune raison derrière cela, je viens de jouer. Cela me survint que cela fait: int (* a) [4] = fn2 (); pour (int i = 0; i <(tailleof (* a) / sizeof ((* a) [0])); ++ i) (* a) [i] = ...; est bon pour deux raisons. (1) La taille de la matrice devient une partie du type afin de ne pas «facilement» envahir ses limites et (2) que vous n'avez plus besoin de transmettre la taille de la matrice autour. Mais je suis d'accord, la syntaxe est horrible dans quoi d'avoir à la déréence de partout et "int (* fn ()) [4]"! Pourtant, je pense qu'un commentaire judicieux après cette partie peut signifier que les gains l'emportent sur les problèmes.
En supposant que vous ne vous attendez pas à supprimer la matrice, utilisez plutôt une référence. int (& a) [4] = fn2 (); pour (int i = 0; i <(tailleof (a) / tailleof ((a) [0])); ++ i) a [i] = 8; code>
Vous passez dans un pointeur sur un tableau de taille connue. En C ++, une référence peut être meilleure car elle se comportera comme un tableau, plutôt que d'avoir à la désespoir.