Diferencia entre revisiones de «Casting»

De Proyectos
Ir a la navegación Ir a la búsqueda
 
(No se muestran 5 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
= Que es? =
= Que es? =
*El casting es la conversión de una variable de un tipo a otro tipo
*El casting es la conversión de una variable de un tipo a otro tipo
  ( <tipo_de_dato> ) <expresión>;
  ( <tipo_de_dato> ) <expresión>
 


= Casting de Variables =
= Casting de Variables =
Línea 13: Línea 12:
r = (float) a/b;
r = (float) a/b;
</pre>
</pre>
*Si queremos hacer una division de dos numeros enteros pero queremos el resultado en numero real, hacemos un casting de la operacion. En el ejmplo anterior r = 1,66666. Si no ponemos el casting r = 1
*Si queremos hacer una division de dos numeros enteros pero queremos el resultado en numero real, hacemos un casting de la operacion. En el ejmplo anterior ''r = 1,66666''. Si no ponemos el casting ''r = 1''
 
*''r'' es del tipo float y queremos que la division entre ''a'' y ''b'' sea del mismo tipo que r, por tanto cambiamos el tipo a float


= Casting de Punteros =
= Casting de Punteros =
*El casting de punteros se hace a los [[Punteros#Punteros Genéricos|punteros genéricos]], aunque también se le puede cambiar el tipo a un puntero int, por ejemplo
*El casting de punteros se hace a los [[Punteros#Punteros Genéricos|punteros genéricos]], aunque también se le puede cambiar el tipo a un puntero int, por ejemplo.
*Su sintaxis es:
*Su sintaxis es:
  (<tipo> *)<variable puntero>
  (<tipo> *)<variable puntero>
== Ejemplo ==
== Ejemplo ==
<pre>
<pre>
Línea 28: Línea 29:
void *p;
void *p;


p = &a;
p = &a;                       //Aqui deberia poner p = (void *)&a para ser puristas
printf("%d\n",*(int*)p);
printf("%d\n",*(int*)p);


Línea 39: Línea 40:
int g;
int g;
p = &a;
p = &a;
g = *(int*)p;     //Hago un casting del puntero neutro p y guardo la variable a la que el puntero apunta, en g.
g = *(int*)p;                 //Como g es un puntero a int, tiene que recibir un puntero a int, por eso hago el casting al puntero neutro p
printf("%d\n",g);
printf("%d\n",g);
</pre>
</pre>
*Si no se hiciera el casting tendríamos un error en el compilador
*Si no se hiciera el casting tendríamos un error en el compilador

Revisión actual - 15:10 21 mar 2013

Que es?

[editar]
  • El casting es la conversión de una variable de un tipo a otro tipo
( <tipo_de_dato> ) <expresión>

Casting de Variables

[editar]

Ejemplo:

int a = 5;
int b = 3;
float r;

r = (float) a/b;
  • Si queremos hacer una division de dos numeros enteros pero queremos el resultado en numero real, hacemos un casting de la operacion. En el ejmplo anterior r = 1,66666. Si no ponemos el casting r = 1
  • r es del tipo float y queremos que la division entre a y b sea del mismo tipo que r, por tanto cambiamos el tipo a float

Casting de Punteros

[editar]
  • El casting de punteros se hace a los punteros genéricos, aunque también se le puede cambiar el tipo a un puntero int, por ejemplo.
  • Su sintaxis es:
(<tipo> *)<variable puntero>


Ejemplo

[editar]
int a = 5;
float b = 3.2;
char c = 'a';

void *p;

p = &a;                        //Aqui deberia poner p = (void *)&a para ser puristas
printf("%d\n",*(int*)p);

p = &b;
printf("%f\n",*(float *)p);

p = &c;
printf("%c\n",*(char *)p);

int g;
p = &a;
g = *(int*)p;                  //Como g es un puntero a int, tiene que recibir un puntero a int, por eso hago el casting al puntero neutro p
printf("%d\n",g);
  • Si no se hiciera el casting tendríamos un error en el compilador