6
votes

Renvoie un tableau d'une taille connue en C ++?

Si je peux passer dans un tableau d'une taille connue: xxx

Pourquoi ne pouvez-je pas renvoyer un: xxx

ici , le ")" in "(*)" génère une erreur de syntaxe :) ".


1 commentaires

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.


3 Réponses :


1
votes

Vous pouvez retourner int **


1 commentaires

Ou annuler *. Les deux ont autant d'informations sur la taille de la matrice.



5
votes

Le [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: xxx pré>

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 int * code> si vous n'avez pas de raison particulière pour laquelle il doit être un pointeur-to- Array. P>

Vous pouvez également simplifier la définition de la fonction avec un TypeDEF: P>

typedef int intarray_t[4];

intarray_t* fn() { ... }


5 commentaires

@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;