2011-07-28 13 views
6

Supongamos que tengo el c siguiente función:C - cantidad de elementos en una matriz?

int MyFunction(const float arr[]) 
{ 
    // define a variable to hold the number of items in 'arr' 
    int numItems = ...; 

    // do something here, then return... 

    return 1 

} 

¿Cómo puedo entrar en numItems el número de elementos que están en la matriz arr?

+1

Recuerdo que solía hacer el tamaño como otro argumento a favor de este tipo de funciones .. – mihsathe

+3

posible duplicado de [Número de elementos de matriz estática y matriz dinámica] (http://stackoverflow.com/questions/2577711/number-of-elements-in-static-array-and-dynamic-array) – sth

Respuesta

11

Lamentablemente no se puede obtener. En C, los siguientes 2 son declaraciones equivalentes.

int MyFunction(const float arr[]); 
int MyFunction(const float* arr); 

Debe pasar el tamaño usted mismo.

int MyFunction(const float* arr, int nSize); 

En caso de char punteros que designan cadenas de la longitud de la matriz de caracteres está determinada por delimitador '\0'.

+1

Gran respuesta. ¿Qué definición de función se prefiere: la primera ('using arr []') o la segunda ('using * arr []')? – user3262424

+0

@ user3262424: Escribiste mal en tu comentario, ten cuidado! :) Creo que elegir entre 'float arr []' y 'float *' para pasar una matriz es una cuestión de gusto –

+0

Gracias Armen. Lo siento por el error tipográfico. – user3262424

1

Esto no es posible a menos que tenga algún formato predeterminado de la matriz. Porque potencialmente puedes tener cualquier cantidad de flotador. Y con el const float arr[] solo pasa la dirección base de la matriz a la función de tipo float [] que no se puede modificar. Entonces puede hacer arr[n] para cualquier n.

5

O bien pasa la cantidad de elementos en otro argumento o tiene alguna convención sobre un elemento delimitador en la matriz.

5

inicialmente me sugirió lo siguiente:

int numItems = sizeof(arr)/sizeof(float); 

But it will not work desde arr no está definido en el contexto actual y que está siendo interpretado como un simple puntero. Por lo tanto, en este caso, deberá indicar el número de elementos como parámetro. La instrucción sugerida funcionaría en el siguiente contexto:

int MyFunction() 
{ 
    float arr[10]; 
    int numItems = sizeof(arr)/sizeof(float); 
    return numItems;// returns 10 
} 
+2

arr es un argumento de función. Es solo un puntero, no una matriz, no funcionará. http://ideone.com/sQqWP – sidyll

+2

Esto es incorrecto. 'arr' no es del tipo' float [] 'cuando es un parámetro de función. En cambio, es 'float *'. –

+0

@Susam: ¿Eso es lo que dije? – sidyll

2

No se puede. El número deberá pasar al MyFunction por separado. Así que agrega un segundo argumento a MyFunction que debe contener el tamaño.

2

Como dije en el comentario, pasarlo como otro argumento parece ser la única solución. De lo contrario, puede tener una convención definida globalmente.

1

mejor que

int numItems = sizeof(arr)/sizeof(float); 

es

int numItems = sizeof(arr)/sizeof(*arr); 
Cuestiones relacionadas