考慮下面的代碼:
#include <stdlib.h>
static double A[100][100];
const double* func(size_t m) {
return A[m];
}
int main() {
double * x = func(5);
x[10] = 20.4;
}
GCC 4.8.1報告:
foo.cc:10:21: error: invalid conversion from ‘const double*’ to ‘double*’ [-fpermissive]
double * x = func(5);
^
而且鏘3.3報告:
foo.cc:10:11: error: cannot initialize a variable of type 'double *' with an rvalue of type 'const double *'
double * x = func(5);
^ ~~~~~~~
而充實ComicSansMS的評論,因爲他評論他已被刪除:
typedef double* ptr;
const ptr func(size_t m) {
return A[m];
}
此代碼與上面貼出的代碼不一樣。 const ptr
是一個常量指向double的指針。原始代碼指向一個常量double的指針。
你可以通過做做沿着這些路線的東西:
typedef double* ptr;
typedef const double* cptr;
cptr func(size_t m) {
return A[m];
}
int main() {
ptr x = func(5);
x[10] = 20.4;
}
這將報告錯誤:
so.cc:27:6: error: cannot initialize a variable of type 'ptr' (aka 'double *') with an rvalue of type 'cptr' (aka 'const double *')
ptr x = func(5);
^ ~~~~~~~
如果你想要一個指向數組的指針,你應該返回'&A [m]'。 – chris
@chris'A'已經是一個二維數組,即類似'double ** A',函數返回指向其第m行的指針。 – PBM
這不是一個二維數組,而是一個指向double的指針。返回'A [m]'返回一個指向double的指針。沒有辦法從'double **'獲得指向數組的指針。 – chris