[C con Clase] Capitulo 12c

David xdrtas en yahoo.es
Dom Feb 4 12:00:39 CET 2007


Hola a todos. Verán, estaba haciendo este ejemplo y me fije en los bits que debería ocupar Mes y Mes2, pero no entiendo bien Mes2[], aquí les pongo el ejemplo:

#include <iostream>
using namespace std;
 
int main() { 
   char Mes[][11] = { "Enero", "Febrero", "Marzo", "Abril", 
      "Mayo", "Junio", "Julio", "Agosto", 
      "Septiembre", "Octubre", "Noviembre", "Diciembre"}; 
   char *Mes2[] = { "Enero", "Febrero", "Marzo", "Abril", 
      "Mayo", "Junio", "Julio", "Agosto", 
      "Septiembre", "Octubre", "Noviembre", "Diciembre"};
 
   cout << "Tamaño de Mes: " << sizeof(Mes) << endl; 
   cout << "Tamaño de Mes2: " << sizeof(Mes2) << endl; 
   cout << "Tamaño de cadenas de Mes2: " 
        << &Mes2[11][10]-Mes2[0] << endl; 
   cout << "Tamaño de Mes2 + cadenas : " 
        << sizeof(Mes2)+&Mes2[11][10]-Mes2[0] << endl;
 
   cin.get();
   return 0; 
}sizeof(Mes) me devuelve 132, osea 12*11, en cambio, sizeof(Mes2) ne devuelve 48 o sea 4*12, alguién me puede explicar porque sizeof(Mes2) no cuenta los elementos restantes del vector?

Además no entiendo esta operación: &Mes2[11][10]-Mes2[0], se supone que esta operación cuenta la distancia que hay entre un puntero y otro, pero la distancia que a mi me da entre el último elemento y el primer elemento es de 106.

Como dice el texto: "cada puntero de Mes2 es una cadena de la longitud adecuada 
  para almacenar cada mes." Capitulo 12c Variables IV - CconClase.

Si esto es asi, la distancia entre el último puntero y el primero debería ser, si no me equivoco 87, porque estoy contando desde el segundo byte de Enero hasta el penúltimo byte de Diciembre para btener la distancia que los separa, al fin y al cabo terminan siendo char, un byte por caracter.

Además, si el puntero Mes2 se adapta al número de elementos que hay, como es posible que exista la posición [11][10] dentro de Mes2, si "Diciembre" tiene 9 elementos + 1 que sería \0, osea, que realmente debería ser Mes2[11][9] que sería el últio caracter "\0" de la cadena diciembre.

Evidentemente, SÉ que ESTOY EQUIVOCADO porque los resultados que me está dando el compilador son completamente distintos a los que estoy mostrando yo aquí.

Sinceramente no le pillo el truco a leer el tamaño del puntero en bytes, si alguien me lo puede explicar se lo agradecería mucho. 

Un cordial saludo. David Lastra.




	
	
		
______________________________________________ 
LLama Gratis a cualquier PC del Mundo. 
Llamadas a fijos y móviles desde 1 céntimo por minuto. 
http://es.voice.yahoo.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070204/0b64a5b4/attachment.html>


Más información sobre la lista de distribución Cconclase