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 85 — #123<br />

✐<br />

3.4. Introducción a los tipos de datos<br />

modificar el objeto externo, al igual que al pasar un puntero (también se puede observar<br />

que la refer<strong>en</strong>cia esconde el hecho de que se está pasando una dirección; esto<br />

se verá más adelante <strong>en</strong> el libro). Gracias a esta pequeña introducción se puede asumir<br />

que las refer<strong>en</strong>cias son sólo un modo sintácticam<strong>en</strong>te distinto (a veces referido<br />

como «azúcar sintáctico») para conseguir lo mismo que los punteros: permitir a las<br />

funciones cambiar los objetos externos.<br />

3.4.7. Punteros y Refer<strong>en</strong>cias como modificadores<br />

Hasta ahora, se han visto los tipos básicos de datos char, int, float, y double, junto<br />

con los especificadores signed, unsigned, short, y long, que se pued<strong>en</strong> utilizar con<br />

los tipos básicos de datos <strong>en</strong> casi cualquier combinación. Ahora hemos añadido los<br />

punteros y las refer<strong>en</strong>cias, que son lo ortogonal a los tipos básicos de datos y los<br />

especificadores, de modo que las combinaciones posibles se acaban de triplicar:<br />

//: C03:AllDefinitions.cpp<br />

// All possible combinations of basic data types,<br />

// specifiers, pointers and refer<strong>en</strong>ces<br />

#include <br />

using namespace std;<br />

void f1(char c, int i, float f, double d);<br />

void f2(short int si, long int li, long double ld);<br />

void f3(unsigned char uc, unsigned int ui,<br />

unsigned short int usi, unsigned long int uli);<br />

void f4(char* cp, int* ip, float* fp, double* dp);<br />

void f5(short int* sip, long int* lip,<br />

long double* ldp);<br />

void f6(unsigned char* ucp, unsigned int* uip,<br />

unsigned short int* usip,<br />

unsigned long int* ulip);<br />

void f7(char& cr, int& ir, float& fr, double& dr);<br />

void f8(short int& sir, long int& lir,<br />

long double& ldr);<br />

void f9(unsigned char& ucr, unsigned int& uir,<br />

unsigned short int& usir,<br />

unsigned long int& ulir);<br />

int main() {} ///:~<br />

Los punteros y las refer<strong>en</strong>cias <strong>en</strong>tran <strong>en</strong> juego también cuando se pasan objetos<br />

d<strong>en</strong>tro y fuera de las funciones; apr<strong>en</strong>derá sobre ello <strong>en</strong> un capítulo posterior.<br />

Hay otro tipo que funciona con punteros: void. Si se establece que un puntero es<br />

un void*, significa que cualquier tipo de dirección se puede asignar a ese puntero<br />

(<strong>en</strong> cambio si ti<strong>en</strong>e un int*, sólo puede asignar la dirección de una variable int a ese<br />

puntero). Por ejemplo:<br />

//: C03:VoidPointer.cpp<br />

int main() {<br />

void* vp;<br />

char c;<br />

int i;<br />

float f;<br />

85<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!