Ваше намерение неясно. Что должен делать getpointeM
? Вернуть указатель на внутреннюю матрицу (через параметр) или вернуть копию матрицы?
Чтобы вернуть указатель, вы можете сделать это
// 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);
}
Для retpointM
объявление будет выглядеть следующим образом
...
double (*retpointM())[3][3] { return &M; }
...
int main() {
double (*A)[3][3];
A = moo.retpointM();
}
Хотя это довольно сложно читать. Вы можете сделать это более понятным, если вы используете typedef-name для своего типа массива
typedef double M3x3[3][3];
В этом случае приведенные выше примеры преобразуются в
// 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();
}