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?
17
A
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 x
5
, &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
- 1. Cuál es la diferencia entre & y operadores & en C#
- 2. ¿Cuál es la diferencia entre los operadores de cortocircuito de Perl (o, y) y (||, &&)?
- 3. ¿Cuál es la diferencia entre Objective-C y Cocoa?
- 4. ¿Cuál es la diferencia entre ".equals" y "=="?
- 5. ¿Cuál es la diferencia entre & y && en MATLAB?
- 6. ¿Cuál es la diferencia entre Visual C++ y C++?
- 7. En C# ¿cuál es la diferencia entre ToUpper() y ToUpperInvariant()?
- 8. ¿Cuál es la diferencia entre System.Type y System.RuntimeType en C#?
- 9. Cuál es la diferencia entre memset y memcpy en C
- 10. ¿Cuál es la diferencia entre File y FileInfo en C#?
- 11. ¿Cuál es la diferencia entre printf() y puts() en C?
- 12. ¿Cuál es la diferencia entre 'eq' y '= ~' en Perl?
- 13. ¿Cuál es la diferencia entre los operadores de prefijo y postfijo?
- 14. ¿Cuál es la diferencia entre los operadores IN y MEMBER OF JPQL?
- 15. ¿Cuál es la diferencia entre C++ administrado y C#?
- 16. ¿Cuál es la diferencia entre el operador "=" y "==" en Bash?
- 17. ¿Cuál es la diferencia entre Managed C++ y C++/CLI?
- 18. ¿Cuál es la diferencia entre C y C incrustado?
- 19. ¿Cuál es la diferencia entre Ctrl + C y Ctrl + [?
- 20. ¿Cuál es la diferencia entre 'int'? y 'int' en C#?
- 21. ¿Cuál es la diferencia entre Process y ProcessStartInfo en C#?
- 22. ¿cuál es la diferencia entre atan y atan2 en C++?
- 23. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?
- 24. ¿Cuál es la diferencia entre Const y Static en C#?
- 25. ¿Cuál es la diferencia entre `=` y `<-` en R?
- 26. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 27. Cuál es la diferencia entre la programación de Seaside y otra programación web
- 28. ¿cuál es la diferencia entre -C y gzipping un mysqldump?
- 29. ¿Cuál es la diferencia entre C# y .NET?
- 30. Objetivo-C: ¿Cuál es la diferencia entre forKey y forKeyPath?
¿Seguro que no estás confundiendo con C++ que utiliza el y como operador de referencia, así como la dirección de ¿operador? –
Posible engaño: http://stackoverflow.com/questions/2667420/ – sbi
Como operadores, '*' y '&' son inversos, como '++' y '--', o' + 'y' -' o '*' y '/'. – outis