是否可以将指针重新解释为带尺寸的数组引用?

时间:2010-04-14 04:50:54

标签: c++ arrays reference

假设我有一些指针,我想将其重新解释为静态维数组引用:

double *p;
double (&r)[4] = ?(p); // some construct?

// clarify
template< size_t N> void function(double (&a)[N]);
...
 double *p;
function(p); // this will not work.
//  I would like to cast p as to make it appear as  double[N]

有可能这样做吗? 我该怎么做?

3 个答案:

答案 0 :(得分:11)

很难看:

double arr[4];
double* d = arr;

double (&a)[4] = *static_cast<double(*)[4]>(static_cast<void*>(d));

确保数组类型与指针原来的匹配。

答案 1 :(得分:-3)

是的,它被称为vector:)

std::vector<double> myVariableArray(4)

编辑:重读,看起来你想要获得声明数组的大小。你不能那样做 - 这是你偶尔可以使用的模板方法功能。由于double *甚至不需要指向double,因此编译器在任何情况下都无法给出明智的答案。

答案 2 :(得分:-3)

double *array;
...
...
int sizearray = sizeof(array)/sizeof(double);