2010-04-14 9 views
5

Supongamos que tengo un poco de puntero, que quiero reinterpretar como referencia de matriz estática dimensión:¿Es posible reinterpretar el puntero como referencia de matriz dimensionada?

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] 

¿Es posible hacerlo? ¿cómo lo hago?

Respuesta

10

Es feo:

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

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

Asegúrese de que el tipo de matriz coincide con lo que el puntero del vino originalmente.

+0

'double (*) [4]', ¿qué es esta construcción? esta es la primera vez que lo veo – Anycorn

+0

@aaa: Es un puntero a una matriz de 4 dobles. – GManNickG

+0

una última pregunta, ¿por qué lanzar al vacío * primero? – Anycorn

-2

Sí, se llama un EDITAR vector :)

std::vector<double> myVariableArray(4) 

: relectura, parece que desea obtener el tamaño de un array se declara con. No puede hacer eso; esa es una función de método de plantilla que puede usar ocasionalmente. Como un double * ni siquiera necesita apuntar a double s, hay pocas maneras en que un compilador pueda darle una respuesta sensata en cualquier caso.

+1

Eh, no es lo mismo. – GManNickG

+0

@GMan: Sí, me di cuenta de eso. Editado Inicialmente se interpretó que como "¿Puedo crear una matriz con una dimensión conocida en tiempo de ejecución?" –

-2
double *array; 
... 
... 
int sizearray = sizeof(array)/sizeof(double); 
+0

La lógica aquí es incorrecta. 'array' no contiene información sobre a qué apunta. Esto siempre devolverá la misma respuesta, sin importar qué. – GManNickG

+2

sizeof (array) cuando la matriz es un puntero devolverá el tamaño del puntero, generalmente 4 o más dependiendo del sistema operativo. –

Cuestiones relacionadas