Votre intention est pas claire. Que doit faire getpointeM
? Renvoie un pointeur vers la matrice interne (via le paramètre) ou renvoie une copie de la matrice?
Pour retourner un pointeur, vous pouvez le faire
// Pointer-based version
...
void getpointeM(double (**p)[3][3]) { *p = &M; }
...
int main() {
double (*A)[3][3];
moo.getpointM(&A);
}
// Reference-based version
...
void getpointeM(double (*&p)[3][3]) { p = &M; }
...
int main() {
double (*A)[3][3];
moo.getpointM(A);
}
Pour retpointM
la déclaration se présente comme suit
...
double (*retpointM())[3][3] { return &M; }
...
int main() {
double (*A)[3][3];
A = moo.retpointM();
}
Ce qui est assez difficile à lire cependant. Vous pouvez le faire paraître beaucoup plus clair si vous utilisez un typedef-nom pour votre type tableau
typedef double M3x3[3][3];
Dans ce cas, les exemples ci-dessus se transformeront en
// Pointer-based version
...
void getpointeM(M3x3 **p) { *p = &M; }
...
int main() {
M3x3 *A;
moo.getpointM(&A);
}
// Reference-based version
...
void getpointeM(M3x3 *&p) { p = &M; }
...
int main() {
double (*A)[3][3];
moo.getpointM(A);
}
// retpointM
...
M3x3 *retpointM() { return &M; }
...
int main() {
M3x3 *A;
A = moo.retpointM();
}
Vous ne devriez pas utiliser les références "parce que c'est C++" ou "juste parce que vous pouvez". Utilisez-les quand ils sont plus clairs que les alternatives disponibles. –
@Roger: oui, eh bien, il est approprié ici, de toute façon: v) – Potatoswatter