考虑下面的代码:
#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