[C con Clase] Capitulo 12c

David xdrtas en yahoo.es
Lun Feb 5 21:04:17 CET 2007


Steven, oye muchas gracias por todo, la verdad es que me has ayudado bastante, espero que no haber sido ninguna molestia . Tienes razón, he mal interpretado el siguiente texto: "Declaramos un puntero del mismo tipo que los elementos del array, y que 
    apunta al primer elemento del array.", y otros textos más que he leido sobre los punteros, hacen equivalencias entre punteros y arrays y me he confundido.

Pero me surgen más dudas, por ejemplo, sabemos que la definición siguiente:
    char* p;  
Significa que "p" apunta a un elemento tipo char pero "p" no es una variable tipo char, o sea, que "p" contiene la dirección de memoria de un elmento que sea char. La pregunta es la siguiente "p" ocupa el tamaño en memoria igual al elemento al que apunta, o "p" por ser un puntero tiene su propia definición de tamaño por el compilador, para ser más claro, el tamaño en bytes de un puntero cualquiera siempre es igual al elemento al que apunta o el compilador define un tamaño genérico en bytes para los punteros según la arquitectura del ordenador o según el propio compilador o tienen que ver los dos.

Mi arquitectura es de 32bit por lo tanto para mi tiene lógica que el puntero, apunte al valor que apunte, siempre tenga el mismo tamaño en mi ordenador, o sea 4bytes, Por ejemplo en una arquitectura de 64bit el puntero tendría un tamaño de 8bytes apunte a char o apunte a int, etc. Pero puedo estar totalmente equivocado, aqui no estoy seguro.

Otra cosa Steven tu escribiste lo siguiente: 
"Las posiciones o direcciones de memoria simepre existen. Lo que tenemos
que andar con cuidado es a la hora de usar las direcciones de memoria.
No todas las direcciones son válidas para nuestro uso. Dicho esto,
puedo hacer lo siguiente:

char lista[10];
cout << lista[12345];  // Peligro"

Se que para el compilador es válido, sin embargo, en este caso, el término siguiente:
cout << &Mes2[11][10]-Mes2[0] << endl;
Está bien escrito? O debería corregirlo así cout << &Mes2[11][9]-Mes2[0] << endl; porque diciembre tiene 9 caracteres más el  \0.
Es que al fin y alcabo no da problemas, lo que dices tú, "El sistema operativo es quien dicta si esta operación es válida o no.", por lo tanto si el sistema operativo lo admite se puede dejar o lo que conviene realmente es manejar el tamaño exacto de la cadena de caracteres.

Muchas gracias Steven, un 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/20070205/8d9213b1/attachment.html>


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