Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 18 Febrero 2011, 21:38 pm



Título: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: anonimo12121 en 18 Febrero 2011, 21:38 pm
void view(int &var,char* comentario)... en esto me sale la memoria que es creo...
y
void view(int var,char* comentario)... me sale 0x... los mismo en los 2
Citar
#include <iostream>
using namespace std;
void view(int &var,char* comentario){
     cout << &var <<"\t| " << var << "\t|" << comentario << "\n";
};
int main(int *argc,char *argv[]){
    int evento=555;
    int salida=999;
    cout << "Memoria" <<"\t\t|" << "Valor" << "\t|" << "comentarios\n";
    while(1){
             view(evento,"var para eventos");
             view(salida,"var comparacion con evento");
             cin >> evento;
             if(evento == salida) break;
    }
    cout << "salida del programa";
    cin.get();
    cin.get();
    return 0;
}


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: Garfield07 en 18 Febrero 2011, 21:46 pm
La diferencia es que el primero manda la dirección de var y el segundo su contenido

Suerte!


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: anonimo12121 en 18 Febrero 2011, 21:48 pm
La diferencia es que el primero manda la dirección de var y el segundo su contenido

Suerte!
en la segunda de donde saca 0x22FF44 por poner un ejemplo de las 2 variables . que manda la direccion de la variable de la funcion?


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: Garfield07 en 18 Febrero 2011, 22:20 pm
en la segunda de donde saca 0x22FF44 por poner un ejemplo de las 2 variables . que manda la direccion de la variable de la funcion?
No se te entiende nada...
Al usar & se manda la dirección de lo que pongas...
Por ejemplo
Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5. int var = 1;
  6. printf ("Var [0x%08x] vale %d", &var, var);
  7.  
  8. return 0;
  9. }
  10.  

Suerte!


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: Littlehorse en 18 Febrero 2011, 22:42 pm

Código
  1. void view(int &var,char* comentario)

En esta función, "var" es una referencia. Es decir, las referencias actúan "como si fuesen" un puntero pero no lo son.  Desde el punto de vista del programador, "var" no apunta a "evento" si no que es "evento".

La dirección de memoria y el contenido de "var" es la misma que la de "evento" u la de "salida" o sea cual sea la variable entero que le pases a la función.

Código
  1. void view(int var,char* comentario)

En este caso, lo que se espera es solo un entero por valor. Por lo tanto "var" va a tener una dirección de memoria distinta que "evento" u "salida" pero si el mismo valor, por lo menos al momento de la llamada.

Citar
void view(int &var,char* comentario)... en esto me sale la memoria que es creo...
y
void view(int var,char* comentario)... me sale 0x... los mismo en los 2

Si en ambas llamadas te salen direcciones de memoria es porque en la función vos estas buscando imprimir la dirección de memoria de "var" y luego su valor.

Código
  1. cout << &var <<"\t| " << var << "\t|" << comentario << "\n";

Saludos


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: anonimo12121 en 19 Febrero 2011, 00:39 am
OK entendido. y unda duda más ya que estamos XDD que consume más un int* o un int? osea punteros o variables.

PD: si es largo de explicar da = ya busco informacion...
gracias por compartir la informacion.


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: Garfield07 en 19 Febrero 2011, 01:02 am
OK entendido. y unda duda más ya que estamos XDD que consume más un int* o un int? osea punteros o variables.

PD: si es largo de explicar da = ya busco informacion...
gracias por compartir la informacion.

Pues exactamente lo mismo :P 4 y 4 bytes xD


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: Littlehorse en 19 Febrero 2011, 01:13 am
El tamaño depende de la arquitectura, no siempre va a ser 4 bytes.

Saludos


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: Garfield07 en 19 Febrero 2011, 01:27 am
Mmm, pero siempre van a ser los mismos. X es un puntero a un int. X es un int. Los punteros a una variable y la variable ocupan lo mismo, no? Corrígeme si me equivoco :P
_____________________________
Modf: Es pura coincidencia, toda clase de puntero ocupa cuatro bytes, que son 0xXXYYZZAA. Fallo mío.
En el caso del int y int * da la casualidad de que son iguales, pero no en los demás  :-[


Título: Re: [?][C]Que diferencia hay en *-& en esta funcion pues eso
Publicado por: Littlehorse en 19 Febrero 2011, 01:49 am
Mmm, pero siempre van a ser los mismos. X es un puntero a un int. X es un int. Los punteros a una variable y la variable ocupan lo mismo, no? Corrígeme si me equivoco :P
_____________________________
Modf: Es pura coincidencia, toda clase de puntero ocupa cuatro bytes, que son 0xXXYYZZAA. Fallo mío.
En el caso del int y int * da la casualidad de que son iguales, pero no en los demás  :-[

Los punteros ocupan lo necesario para almacenar direcciones de memoria, y no, no necesariamente tienen que tener el mismo tamaño del tipo de variable a la que pueden apuntar. De hecho, no podría ser nunca de esa manera, ¿Imaginas un puntero a char de 1 byte? no tendría la capacidad para almacenar la dirección de memoria correctamente.

El tamaño ya sea de los punteros u de cualquier otro elemento depende de la arquitectura y del modelo de datos utilizado. No es lo mismo un puntero en una arquitectura x86 que en una x64.

Para mas información:
http://en.wikipedia.org/wiki/64-bit

Saludos