Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐