[C con Clase] Capitulo 12c
Programante
programante en gmail.com
Lun Feb 5 22:18:03 CET 2007
David escribió:
> 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.
Exacto. El puntero tiene su propio tamaño, que en intel 32 bits será de
4 bytes. Puedes verlo con sizeof(char*). Otras arquitecturas pueden
tener distinto tamaño de punteros, ¡e incluso variar el tipo de puntero
dependiendo de a lo que apunte!
> 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.
Conviene hacer exclusivamente lo que tienes permitido hacer. Supongamos
que eres un cajero: Es posible que si cada vez que te piden dinero coges
un poco más no pase nada y en cambio si coges mucho más te despidan.
¿Acaso significa eso que es seguro coger un poco de más?
Más información sobre la lista de distribución Cconclase