2010-04-23 123 views
17

Estoy simplemente asegurándome de entender este concepto correctamente. Con el operador *, hago una nueva variable, a la que se le asigna un lugar en la memoria. Para no duplicar innecesariamente las variables y sus valores, el operador & se usa al pasar valores a los métodos y tal, y apunta a la instancia original de la variable, en lugar de hacer nuevas copias ... ¿Es así? Obviamente es una comprensión superficial, pero solo quiero asegurarme de no confundirlos. ¡Gracias!¿Cuál es la diferencia entre los operadores * y the & en la programación c?

+4

¿Seguro que no estás confundiendo con C++ que utiliza el y como operador de referencia, así como la dirección de ¿operador? –

+1

Posible engaño: http://stackoverflow.com/questions/2667420/ – sbi

+2

Como operadores, '*' y '&' son inversos, como '++' y '--', o' + 'y' -' o '*' y '/'. – outis

Respuesta

38

No del todo. Está confundiendo un * que aparece en un nombre de tipo (utilizado para definir una variable), con el operador *.

int main() { 
    int i; // i is an int 
    int *p; // this is a * in a type-name. It means p is a pointer-to-int 
    p = &i; // use & operator to get a pointer to i, assign that to p. 
    *p = 3; // use * operator to "dereference" p, meaning 3 is assigned to i. 
} 
11

Uno utiliza & para encontrar la dirección de una variable. Así que si usted tiene:

int x = 42; 

y (por ejemplo) el ordenador se ha almacenado en la ubicación de la dirección x5, &x habría 5. Del mismo modo se puede tienda que se ocupan en una variable llamada un puntero :

int* pointer_to_x = &x; // pointer_to_x has value 5 

Una vez que tenga un puntero que puede desreferenciar usando el operador * para convertirlo de nuevo en el tipo al que apunta :

int y = *pointer_to_x; // y is assigned the value found at address "pointer_to_x" 
         // which is the address of x. x has value 42, so y will be 42. 
4

Cuando una variable se combina con el operador *, esa variable contiene una dirección de memoria.

Cuando se combina con el operador &, devuelve la dirección en la que se mantiene la variable.

Si tuviera

int x = 5; //5 is located in memory at, for example, 0xbffff804 
int *y = &x; //&x is the same thing as 0xbffff804, so y now points to that address 

tanto x y *y produciría 5

Cuestiones relacionadas