Resultados 1 al 5 de 5

Tema: duda sobre punteros y referencias en c++

  1. #1

    Predeterminado duda sobre punteros y referencias en c++

    Buenas chicos, estoy viendo programación en la universidad, y hoy vi como el ordenador maneja las variables en la memoria, entonces partiendo de que un entero es básicamente un bloque de 4 bytes y el char es un solo byte, se me ocurrió hace poco hacer esta prueba:

    Código:
    #include <iostream>
    
    int main(){
    char c = char(70);
    int a=33554431;
    char *pc = &c;
    int compare;
    std::cout << "&a --->" << int(&a) << "----->" << a <<std::endl;
    std::cout << "&c --->" << int(&c) << "----->" << c <<std::endl;
    
    if(int(pc) < int(&a)){
         while(int(pc) < int(&a))++pc;
    }
    else
    while(int(pc) > int(&a))--pc;
    
    *pc = 0;
    
    std::cout << "&a --->" << int(&a) << "----->" << a <<std::endl;
    
    getchar();
    return 0;    
    }
    Yo no tengo ahora en mente un ejemplo numérico más intuitivo, pero yo supongo que al mover el puntero de tipo char justo en la dirección donde se encuentra el int, este cambia solo los primeros (o los últimos) 8 bits del int verdad? Esto me parece un poquito peligroso.

    otra pregunta, por que no puedo hacer esto?

    Código:
    int num;
    int *p;
    if(p == &num){
    fu();
    }
    si el puntero contiene un entero y la referencia a num es otro entero, por que el compilador no me permite hacer esa comparación sin necesidad del cast?

  2. #2

    Predeterminado Re: duda sobre punteros y referencias en c++

    Tu código de ejemplo tiene algunos problemas, como este:
    char c = char(70);

    De todas formas, se entiende la idea.

    Los punteros no son peligrosos por si mismos, lo peligroso son los programadores que no saben usarlos

    No te permite hacer esa comparación sin un cast, precisamente para "asegurarse" que el programador sabe lo que está haciendo. No hay ningún problema en ello.

  3. #3

    Predeterminado Re: duda sobre punteros y referencias en c++

    me sentiría muy agradecida si me corriges cualquier error cometido y me explicas por que es un error, en este caso, que problema hay en esto? char c = char(70); Porque no debería ser igual a esto? char c = 'F';
    Última edición por monica_aguilar; 11/04/2018 a las 08:10

  4. #4

    Predeterminado Re: duda sobre punteros y referencias en c++

    Yo empezaría por aquí:
    http://cpplint.appspot.com/

    En cuanto al cast, si quieres usar los de C++ sería:
    char c = static_cast<char> 70;

    Si quieres los de C:
    char c = (char) 70;

  5. #5

    Predeterminado Re: duda sobre punteros y referencias en c++

    Cita Iniciado por jgutierrez Ver mensaje
    Yo empezaría por aquí:
    http://cpplint.appspot.com/

    En cuanto al cast, si quieres usar los de C++ sería:
    char c = static_cast<char> 70;

    Si quieres los de C:
    char c = (char) 70;
    Vale gracias, ahora yo te haré algunas preguntas sobre la página que me mandaste (muy buena por cierto, la usaré frecuentemente), porque realmente no entiendo.

    1 - Streams are highly discouraged. [readability/streams]

    por que? la ventaja que tengo respecto al C es que puedo usar streams de I/O, así que esto me sorprende mucho, por que me desaconseja usar streams?

    22 - Could not find a newline character at the end of the file. [whitespace/ending_newline] [5]

    Este error no lo entiendo, no comprendo que espera el corrector que yo haga para corregirlo.

    Apartando esto, tengo otra pregunta con respecto a la distribución de la memoria, consideremos el siguiente código:

    Código:
    #include <iostream>
    
    int main(void){
        int* height;
        int numero = 8;
        height = &numero;
        std::cout<< height << "-->" << *height;
        getchar();
    return 0;    
    }
    Compilamos y ejecutamos este código, luego cerramos el programa y eliminamos la inicialización de la variable numero, entonces compilamos y ejecutamos nuevamente, pero a pesar de que el programa muestra exactamente la misma dirección en memoria en la que se encuentra la variable numero, esta tiene un valor diferente a 8, pero yo anteriormente había cambiado la variable, ¿no debería tener el numero 8 asignado anteriormente? yo pensaba que al declarar una variable, esta asumía el valor que en ese momento se encontraba en ese espacio en memoria si no era inicializada.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •