你的意圖是不明確的。 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,名稱爲您的數組類型
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();
}
來源
2010-02-22 05:24:26
AnT
你不應該使用引用「因爲這是C++」或「只是因爲你可以」。當他們比可用的替代品更清晰時使用它們。 – 2010-02-22 05:18:46
@Roger:是的,在這裏,無論如何,這是適當的:v) – Potatoswatter