Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 121 — #159<br />
✐<br />
3.8. Creación de tipos compuestos<br />
Primero, el programa garantiza que se le haya pasado un argum<strong>en</strong>to comprobando<br />
el valor de argc, que vale dos si hay un solo argum<strong>en</strong>to (es uno si no hay<br />
argum<strong>en</strong>tos, ya que el nombre del programa siempre es el primer elem<strong>en</strong>to de a-<br />
rgv). Si eso falla, imprime un m<strong>en</strong>saje e invoca la función exit() de la librería<br />
Estándar de C para finalizar el programa.<br />
El programa toma el argum<strong>en</strong>to de la línea de comandos y convierte los caracteres<br />
a double utilizando atof(). Luego el double se trata como un vector de bytes<br />
tomando la dirección y moldeándola a un unsigned char*. Para cada uno de estos<br />
bytes se llama a printBinary() para mostrarlos.<br />
Este ejemplo se ha creado para imprimir los bytes <strong>en</strong> un ord<strong>en</strong> tal que el bit de<br />
signo aparece al principio - <strong>en</strong> mi máquina. En otras máquinas puede ser difer<strong>en</strong>te,<br />
por lo que puede querer re-organizar el modo <strong>en</strong> que se imprim<strong>en</strong> los bytes. También<br />
debería t<strong>en</strong>er cuidado porque los formatos <strong>en</strong> punto-flotante no son tan triviales de<br />
<strong>en</strong>t<strong>en</strong>der; por ejemplo, el expon<strong>en</strong>te y la mantisa no se alinean g<strong>en</strong>eralm<strong>en</strong>te <strong>en</strong>tre<br />
los límites de los bytes, <strong>en</strong> su lugar un número de bits se reserva para cada uno y<br />
se empaquetan <strong>en</strong> la memoria tan apretados como se pueda. Para ver lo que esta<br />
pasando, necesitaría averiguar el tamaño de cada parte del número (los bit de signo<br />
siempre son de un bit, pero los expon<strong>en</strong>tes y las mantisas pued<strong>en</strong> ser de difer<strong>en</strong>tes<br />
tamaños) e imprimir separados los bits de cada parte.<br />
Aritmética de punteros<br />
Si todo lo que se pudiese hacer con un puntero que apunta a un vector fuese<br />
tratarlo como si fuera un alias para ese vector, los punteros a vectores no t<strong>en</strong>drían<br />
mucho interés. Sin embargo, los punteros son mucho más flexibles que eso, ya que se<br />
pued<strong>en</strong> modificar para apuntar a cualquier otro sitio (pero recuerde, el id<strong>en</strong>tificador<br />
del vector no se puede modificar para apuntar a cualquier otro sitio).<br />
La aritmética de punteros se refiere a la aplicación de alguno de los operadores<br />
aritméticos a los punteros. Las razón por la cual la aritmética de punteros es un tema<br />
separado de la aritmética ordinaria es que los punteros deb<strong>en</strong> ajustarse a cláusulas<br />
especiales de modo que se comport<strong>en</strong> apropiadam<strong>en</strong>te. Por ejemplo, un operador<br />
común para utilizar con punteros es ++, lo que "añade uno al puntero." Lo que de<br />
hecho significa esto es que el puntero se cambia para moverse al "sigui<strong>en</strong>te valor,"<br />
Lo que sea que ello signifique. A continuación, un ejemplo:<br />
//: C03:PointerIncrem<strong>en</strong>t.cpp<br />
#include <br />
using namespace std;<br />
int main() {<br />
int i[10];<br />
double d[10];<br />
int* ip = i;<br />
double* dp = d;<br />
cout