Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Binary_Death en 15 Agosto 2010, 04:00 am



Título: [C]Duda, typedef.
Publicado por: Binary_Death en 15 Agosto 2010, 04:00 am
Este era el post de otra duda, pero como la solucioné antes de que nadie respondiera, economizo, edito y planteo otra  ;D

Typedef permite definir alias para los tipos de variables, de tal forma que si yo hago...

Código:
typedef int entero;
entero a = 5;

Puedo definir la variable "a" como un entero cuyo valor es 5.
Bien, la cuestión es... en mi libro de aprendizaje, vienen la siguientes sentencias:

Código:
typedef int * pint;
int *p = pint(0x1F5);

Lo cual, a mi entender, no tiene ningún sentido, pues declara el alias como un puntero... no le veo la lógica, lo que se pretende hacer con eso. Y más aun, usando "pint" como la llamada a una función  :-\

En fin, gracias por la atención...
Saludos =)


Título: Re: [C]Duda, typedef.
Publicado por: Og. en 15 Agosto 2010, 06:47 am
Has visto esto?
Código
  1. std::cout << (int)5/2;
Lo que hace es que te imprimirá un 2 osea la parte entera de 5/2.
Es igual si haces:
Código
  1. std::cout << int(5/2);

Ahora imagina que quieres decirle a tu programa que le estas dando un puntero a un entero.

Harías esto:

Código
  1. (int*)0x0001;

ó

Código
  1. typedef int* pint;
  2. pint(0x0001);

Saludos!


Título: Re: [C]Duda, typedef.
Publicado por: Binary_Death en 15 Agosto 2010, 07:42 am
En la estructura cast... transformamos los dos valores a int, creo recordar.
Entonces... en el caso del puntero, es lo mismo? Pero, dónde se define el puntero?

Código:
(int*)0x0001;

Creamos un puntero a un entero, y ese puntero apunta a la direccion 0x0001, pero donde esta el puntero?  :xD Es decir... por lo que se ahora, un puntero de declara y define así:

Código:
int *p = 0x0001;

Y con eso habré creado un puntero a un entero que apunte a la celda de memoria 0x0001... sin embargo, no entiendo la estructura que me planteas  :-\
Con int ya decimos que apunta a un entero, entonces, por que el cast?

Gracias por ayudar Og. ^^

EDITO:

Pongo algo que hice con lo que me dijiste:

Código:
#include <stdio.h>
int main() {
    int a = 4;
 int *p = (int*)&a;
 printf("%d", *p);
return 0;
}

Pero sigo sin entender, si con "int *p" ya decimos que direcciona un entero, para que el cast  :xD