Autor Tema: Uso de cout y punteros  (Leído 3600 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Uso de cout y punteros
« en: 22 de Abril de 2012, 22:46:35 »
Hola amigos del subforo de c c++ y c#.
Estoy estudiando punteros y para practicar hice el siguiente código el cual lo compilo con dev c++.
Todo está bien salvo la salida de las dos siguientes líneas mediante el uso de cout.

 cout << "muestra contenido de ptrLow que apunta a myVar: "  << hex <<  *ptrLow << endl << endl;
  cout << "muestra contenido de ptrHigh que apunta a myVar: " << hex <<  *ptrHigh << endl << endl;


La salida de esas dos líneas es:
muestra contenido de ptrLow que apunta a myVar: 
muestra contenido de ptrHigh que apunta a myVar: '

Es decir no me muestra 10 y 27 como si lo puedo hacer con printf.
Hay algún error de formato o sintaxis en el uso de cout? Deberé hacer algún cast?
Saludos
        Jukinch

Código: C++
  1. #include <cstdlib>
  2. #include <iostream>
  3. using namespace std;
  4. int main(int argc, char *argv[])
  5. {
  6.  
  7.  
  8. short int myShortVar;
  9. short int *ptrShort;
  10. char myCharVar;
  11. void *ptrVoid;
  12.  
  13. unsigned short int myVar=0x2710; // 0x2710 =10000 decimal
  14. char *ptrLow=(char*)&myVar;
  15. char *ptrHigh=((char *)&myVar+1);
  16. printf("El tama¤o de char es %d\n", sizeof(char));
  17. printf("El tama¤o de unsigned char es %d\n", sizeof(unsigned char));
  18. printf("El tama¤o de short int es %d\n", sizeof(myShortVar));
  19. printf("El tama¤o de int es %d\n", sizeof(int));
  20. printf("El tama¤o de long es %d\n", sizeof(long));
  21. printf("El tama¤o de float es %d\n", sizeof(float));
  22. printf("El tama¤o de double es %d\n", sizeof(double));
  23. printf("\n");
  24. printf("El tama¤o de ptrShort es %d\n", sizeof(ptrShort));
  25. printf("El tama¤o de ptrVoid es %d\n", sizeof(ptrVoid));
  26. printf("\n");
  27. printf("\n");
  28.  
  29.  
  30.  
  31. printf("El tama¤o de unsigned short int myVar en bytes es: %d\n",sizeof(myVar));
  32. printf("la direcci¢n de myVar en HEX es: %X\n", &myVar);
  33. printf("la direcci¢n de myVar en DEC es: %d\n", &myVar);
  34. printf("contenido de la Variable myVar en HEX: %X\n", myVar);
  35. printf("contenido de la Variable myVar en DEC: %u\n",myVar);
  36. printf("\n");
  37. printf("El tama¤o de ptrLow es %d\n", sizeof(ptrLow));
  38. printf("la direcci¢n de ptrLow en HEX es: %X\n", &ptrLow);
  39. printf("la direcci¢n de ptrLow en DEC es: %d\n", &ptrLow);
  40. printf("direcci¢n a donde apunta  ptrLow en HEX es: %X\n", ptrLow);
  41. printf("direcci¢n a donde apunta  ptrLow en DEC es: %d\n", ptrLow);
  42. printf("contenido de la variable a donde apunta  ptrLow en HEX es: %X\n", *ptrLow);
  43. printf("contenido de la variable a donde apunta  ptrLow en DEC es: %u\n", *ptrLow);
  44. printf("\n");
  45. printf("El tama¤o de ptrHigh es %d\n", sizeof(ptrLow));
  46. printf("la direccion de ptrHigh en HEX es: %X\n", &ptrHigh);
  47. printf("la direccion de ptrHigh en DEC es: %d\n", &ptrHigh);
  48. printf("direcci¢n a donde apunta  ptrHigh en HEX es: %X\n", ptrHigh);
  49. printf("direcci¢n a donde apunta  ptrHigh en DEC es: %d\n", ptrHigh);
  50. printf("contenido de la variable a donde apunta  ptrHigh en HEX es: %X\n", *ptrHigh);
  51. printf("contenido de la variable a donde apunta  ptrHigh en DEC es: %d\n", *ptrHigh);
  52. printf("\n");
  53.  
  54.  
  55.    cin.get();
  56.      
  57. *((char *)&myVar) = 0x10;
  58. *((char *)&myVar+1) = 0x27;
  59.   cout << "contenido de la Variable myVar en hex: " <<hex << myVar << endl << endl;
  60.   cout << "contenido de la Variable myVar en decimal: " << dec << myVar << endl << endl;
  61.    cin.get();
  62.   cout << "contenido del nible alto de la Variable myVar: " << hex << (myVar >> 8) << endl << endl;
  63.    
  64.   cout << "contenido del nible bajo de la Variable myVar: " << hex << (myVar & 0xff) << endl << endl;
  65.   cout << "muestra contenido de ptrLow que apunta a myVar: "  << hex <<  *ptrLow << endl << endl;
  66.   cout << "muestra contenido de ptrHigh que apunta a myVar: " << hex <<  *ptrHigh << endl << endl;
  67.  
  68. printf("contenido de la variable a donde apunta  ptrLow en HEX es: %X\n", *ptrLow);
  69. printf("contenido de la variable a donde apunta  ptrLow en DEC es: %u\n", *ptrLow);
  70. printf("\n");
  71. printf("contenido de la variable a donde apunta  ptrHigh en HEX es: %X\n", *ptrHigh);
  72. printf("contenido de la variable a donde apunta  ptrHigh en DEC es: %u\n", *ptrHigh);
  73. printf("\n");
  74.  
  75.     system("PAUSE");
  76. return EXIT_SUCCESS;
  77. }
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Uso de cout y punteros
« Respuesta #1 en: 22 de Abril de 2012, 23:31:49 »
Hola!

Vas a tener que castearlo a int, ya que sólo acepta ese tipo el modificador hex del cout! Si no es int, no lo procesa y se muestra en su representación nativa(en este caso un char).

Código: C++
  1. cout << "muestra contenido de ptrLow que apunta a myVar: "  << hex <<  (int)*ptrLow << endl << endl;
  2.       cout << "muestra contenido de ptrHigh que apunta a myVar: " << hex <<  (int)*ptrHigh << endl << endl;
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Uso de cout y punteros
« Respuesta #2 en: 22 de Abril de 2012, 23:46:11 »
Gracias BrunoF!  ((:-))
Estoy dándole duro a los punteros y no me podía ir a dormir tranquilo sin esos dos valores!
Ahora si jukinch está feliz.  :D
    Te mando un abrazo y gracias por la info.
                Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes


 

anything