2012-01-27 11 views
5

¿por qué obtengo los resultados 6, y luego 8 por el siguiente código? Busqué en las publicaciones, pero no puedo encontrar una coincidencia exacta de mi pregunta. Gracias.sizeof para una matriz de caracteres

#include <stdio.h> 

void getSize(const char *str) 
{ 
     printf("%d\n", sizeof(str)/sizeof(char)); 
} 

int main() 
{ 
     char str[]="hello"; 
     printf("%d\n", sizeof(str)/sizeof(char)); 
     getSize(str); 
} 
+0

Probablemente lo sepas, pero por si acaso, utiliza 'strlen (str)' si lo que quieres es la longitud de la cadena. – mark4o

+0

posible duplicado de [Cómo encontrar el tamaño de (un puntero que apunta a una matriz)] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeof-a-pointer-pointing-to- an-array) –

+0

@ mark4o sí Lo sabía, pero quiero entender lo anterior. –

Respuesta

7

En su función getSize(), str es un puntero. Por lo tanto, sizeof(str) devuelve el tamaño de un puntero. (que es 8 bytes en este caso)

En su función main(), str es una matriz. Por lo tanto, sizeof(str) devuelve el tamaño de la matriz.

Esta es una de las sutiles diferencias entre matrices y punteros.

+0

Realmente no lo llamaría sutil: * Hola chicos cuando llamo 'sizeof' en diferentes tipos obtengo resultados diferentes?! * –

+0

@ todda.speot.is Hubiera sido sutil si el OP hubiera escrito' void getSize (const char str []) '. –

+0

@Complicatedseebio Eso está empezando a alejarse de las sutiles diferencias entre matrices/punteros y avanzar hacia sutiles diferencias entre matrices/matrices ... –

2

Diferentes tipos, diferentes tamaños.

En main, str es un char[6]. En getSizestr es un const char *. Un puntero es (en una plataforma de 64 bits) 8 bytes, por lo que (dado que sizeof(char) = 1):

6/1 = 6 
8/1 = 8 
+0

Ya veo. Creo que sabía que al pasar una matriz a una función, la matriz se convierte en un puntero que apunta al primer elemento. Pero me pareció extraño por qué su tamaño es de 8 bytes. Aparentemente, olvidé que el sistema es uno de 64 bits. –