Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Enorme Follón: Punteros

Iniciado por J_F_NASH, 09 de Octubre de 2003, 01:11:32 PM

« anterior - próximo »

J_F_NASH

 #include <iostream.h>
#include <conio.h>

void main(int Num, char *cadena[])
{
int x = 0x01ff;

cout << "x(dec):" << x << hex << " x(hex):" << x << dec << endl;
getch();

int *p = &x;
cout << "Puntero int:" << *p << " Direccion de x:" << &x << endl;
getch();
cout << "Puntero esta en la direccion:" << &p << endl;
getch();

//Los resultados de lo que viene a continuacion no me caben en la cabeza:
unsigned char *p1 = (unsigned char *)&x; // entiendo que p y p1 apuntan a lo que hay en &x, osea: 511
cout << "byte 1:" << (int)*(p1+0) << endl; // p1 es multiplicado por ¿int? ¿que número?
getch();
cout << "byte 2:" << (int)*(p1+1) << endl;
getch();
cout << "byte 3:" << (int)*(p1+2) << endl;
getch();
cout << "byte 4:" << (int)*(p1+3) << endl;
getch();

//modicicamos solo el 2 byte
*(p1+1)=0;
cout << "\nNuevo valor x(dec):" << x << hex << " x(hex): " << x << dec << endl;
getch();
cout << "\nImprime direcciones de c/u:" << endl;
getch();
for (int i=0; i<4;i++)
 cout << "\nDireccion de " << i << "es " << hex << (long) (p1+i) << dec << endl;
getch();

}





S2.

HgH

 
Citar
//Los resultados de lo que viene a continuacion no me caben en la cabeza:
unsigned char *p1 = (unsigned char *)&x; // entiendo que p y p1 apuntan a lo que hay en &x, osea: 511
cout << "byte 1:" << (int)*(p1+0) << endl; // p1 es multiplicado por ¿int? ¿que número?

No, no es una multiplicación. Eso quiere decir algo como "el byte apuntado por (p1+0) y convertido a int".
Si te es mas claro, sería algo como

unsigned char ValorByte      = *(p1+0);
int                  ValorEntero  = (int)ValorByte;
cout <<"byte 1:"<<ValorEntero<<endl;


Saludillos

gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

_Grey

 
Citarunsigned char *p1 = (unsigned char *)&x; // entiendo que p y p1 apuntan a lo que hay en &x, osea: 511

p1 es un puntero unsigned char unsigned char es de 1Byte, es decir que cuando leas el valor que apunta, leeras 255, que es lo que hay en el Byte que apunta &x, la variable x es de 4Bytes (en compiladores antiguos de 2Bytes), el primer Byte contiene 255 (0xff), el segundo 1(0x1) y los otros 2 Bytes estan a 0.

Citarcout << "byte 1:" << (int)*(p1+0) << endl;

HgH, entiende que coge el puntero como un puntero de int, yo creo que es un error de sintaxis, y se deberia escrivir (int*), pero teniendo en cuenta que quieres leer el contenido de un Byte podrias dejar solo el *, en realidad compilado se multiplica ..... pero por un tipo y no un valor..... por eso creo que es error de sintaxis, pon (int*) o si quieres leer solo 1 Byte deja solo el *.

Saludotes.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.