Su intención no es clara. ¿Qué se supone que debe hacer getpointeM
? ¿Devuelve un puntero a la matriz interna (a través del parámetro) o devuelve una copia de la matriz?
para devolver un puntero, puede hacerlo
// 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);
}
Para retpointM
la declaración se vería de la siguiente manera
...
double (*retpointM())[3][3] { return &M; }
...
int main() {
double (*A)[3][3];
A = moo.retpointM();
}
Esto es bastante difícil de leer sin embargo. Puede hacer que se vea mucho más claro si se utiliza un nombre de typedef para la matriz de tipo
typedef double M3x3[3][3];
En ese caso, los ejemplos anteriores se transformarán 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();
}
No debe usar referencias "porque es C++" o "solo porque puede". Úselos cuando sean más claros que las alternativas disponibles. –
@Roger: sí, bueno, es apropiado aquí, de todos modos: v) – Potatoswatter