13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 122 — #160<br />

✐<br />

Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />

Para una ejecución <strong>en</strong> mi máquina, la salida es:<br />

ip = 6684124<br />

ip = 6684128<br />

dp = 6684044<br />

dp = 6684052<br />

Lo interesante aquí es que aunque la operación ++ parece la misma tanto para el<br />

int* como para el double*, se puede comprobar que el puntero de int* ha cambiado<br />

4 bytes mi<strong>en</strong>tras que para el double* ha cambiado 8. No es coincid<strong>en</strong>cia, que estos<br />

sean los tamaños de int y double <strong>en</strong> esta máquina. Y ese es el truco de la aritmética<br />

de punteros: el compilador calcula la cantidad apropiada para cambiar el puntero de<br />

modo que apunte al sigui<strong>en</strong>te elem<strong>en</strong>to <strong>en</strong> el vector (la aritmética de punteros sólo<br />

ti<strong>en</strong>e s<strong>en</strong>tido d<strong>en</strong>tro de los vectores). Esto funciona incluso con vectores de structs:<br />

//: C03:PointerIncrem<strong>en</strong>t2.cpp<br />

#include <br />

using namespace std;<br />

typedef struct {<br />

char c;<br />

short s;<br />

int i;<br />

long l;<br />

float f;<br />

double d;<br />

long double ld;<br />

} Primitives;<br />

int main() {<br />

Primitives p[10];<br />

Primitives* pp = p;<br />

cout

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!