2009-10-13 18 views
28

que tienen una matriz char* de la siguiente manera:C char * sizeof gama

char *tbl[] = { "1", "2", "3" }; 

¿Cómo se utiliza el operador sizeof para obtener el número de elementos de la matriz; 3?

Lo siguiente funcionó, pero ¿es correcto?

int n = sizeof(tbl)/sizeof(tbl[0]) 
+3

No si la matriz fue recibido como un parámetro. Compruebe [mi respuesta a una pregunta similar] (http://stackoverflow.com/a/10349610/481534). – Elideb

+0

Posible duplicado de [¿Cómo puedo determinar el tamaño de mi matriz en C?] (Http://stackoverflow.com/questions/37538/how-do-i-determine-the-size-of-my-array-in -c) –

+0

Esto fue realmente respondido [aquí] (http://stackoverflow.com/questions/37538/c-how-do-i-determine-the-size-of-my-array) Y esa era la forma correcta de hacerlo – Ayman

Respuesta

34

Sí,

size_t n = sizeof(tbl)/sizeof(tbl[0]) 

es la forma más común de hacer esto.

Tenga en cuenta que el uso de int para tamaños de matriz no es la mejor idea.

+11

¿Hay algún problema con el uso de 'size_t' para los tamaños? ¿O al menos algo sin firmar? –

+0

'#define countof (a) ((sizeof (a)/sizeof ((a) [0])))' - Me pregunto si es una forma segura de declarar dicha macro. Especialmente para matrices multidimensionales y cosas por el estilo ... – leemes

+0

Creo que sizeof siempre se calcula en tiempo de compilación. No puedo pensar en una forma de obtener un tamaño significativo de algo que no se conoce en tiempo de compilación. – aragaer

13

El más corto y, sin duda, la versión más limpia se vería como

sizeof tbl/sizeof *tbl 

:)

+14

Eso seguro es discutible. – Justin

3

Sí, se le dará el número de elementos en la matriz TB1.

int n = sizeof(tbl)/sizeof(tbl[0]) 

Interpretación:

sizeof (TB1) voluntad da el tamaño de toda la matriz es decir, TB1 = 3 bytes

sizeof (TB1 [0]) da el tamaño del carácter como tb1 [0] da un valor de carácter (valor en la dirección tb1 + 0) = 1 byte

División de los dos le dará 3 elementos

+0

'tbl' es una matriz de' char * ', no una matriz de' char'. Si 'sizeof (char *) == 4', entonces está dividiendo 12 bytes por 4 bytes, rinde 3 * elementos de matriz *, no 3 bytes. –

+0

lo siento es un error tipográfico, debería ser 3 elementos, no bytes ... :) – Mahesh

+0

@tbl todavía no es una matriz de caracteres. –