2010-06-09 19 views
5

Si me puede pasar en una matriz de un tamaño conocido:¿Devuelve una matriz de un tamaño conocido en C++?

void fn(int(*intArray)[4]) 
{ 
    (*intArray)[0] = 7; 
} 

por qué no puedo devolver uno:

int intArray[4] = {0}; 
int(*)[4] fn() 
{ 
    return &intArray; 
} 

aquí, el ")" en "(*)" genera " error de sintaxis :)".

+0

Está pasando un puntero a una matriz de tamaño conocido. En C++, una referencia podría ser mejor ya que se comportará como una matriz, en lugar de tener que desreferenciarla. –

Respuesta

4

El [4] va después del nombre de la función, al igual que lo va después del nombre de la variable en una definición de variable:

int (*fn())[4] 
{ 
    return &intArray; 
} 

Como se trata de una sintaxis muy oscura, con tendencia a ser confunde a todos los que lo leen, recomendaría devolver la matriz como un simple int*, si no tiene una razón especial por la que tiene que ser un puntero a matriz.

También puede simplificar la definición de función con un typedef:

typedef int intarray_t[4]; 

intarray_t* fn() { ... } 
+0

hmm, esto no funciona en ninguno de los compiladores en línea – Will

+0

@Will: Funciona con gcc v3.4.3 y v4.4.1, así como con Sun cc v5.9, así que diría que es un problema con aquellos compiladores en línea. – sth

+0

Puede usar typedef para aliviar los problemas de sintaxis. Pero realmente, es mejor que vuelvas int **, o incluso int *. – Arkadiy

1

Puede volver int**

+0

O nulo *. Ambos tienen tanta información sobre el tamaño de la matriz. –

2

Its not allowed to return arrays from functions, but there are workarounds.

Por ejemplo, el siguiente código:

int fn()[4] { 
    ... 

No ser aceptado por los distintos compiladores de línea; Lo probé en el compilador en línea Comeau, que está considerado como uno de los más estándar seguimiento de los compiladores, e incluso en el modo relajado que dice:

error: function returning array is not allowed

Otro cartel sugiere volver int** ; esto funcionará, pero tenga mucho cuidado de devolver la memoria asignada en el montón y no asignada en la pila.

Cuestiones relacionadas