2010-04-23 2 views
17

Mi sto solo assicurando di comprendere correttamente questo concetto. Con l'operatore *, creo una nuova variabile, a cui è assegnato un posto in memoria. Per non duplicare inutilmente le variabili e i loro valori, l'operatore & viene utilizzato per passare valori a metodi e simili e in effetti punta all'istanza originale della variabile, invece di creare nuove copie ... È giusto? Ovviamente è una comprensione superficiale, ma voglio solo assicurarmi di non farmi confondere. Grazie!Qual è la differenza tra * e gli operatori nella programmazione c?

+4

Sei sicuro che non stai confondersi con C++ che utilizza la & come operatore di riferimento, nonché l'indirizzo-di operatore? –

+1

Possibile dupe: http://stackoverflow.com/questions/2667420/ – sbi

+2

Come operatori, '*' e '&' sono inverse, come '++' e '--', o' + 'e' -' o '*' e '/'. – outis

risposta

38

Non proprio. Stai confondendo un * visualizzato in un nome-tipo (utilizzato per definire una variabile), con l'operatore *.

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 usa & per trovare l'indirizzo di una variabile. Quindi, se avete:

int x = 42; 

e (per esempio) il computer ha memorizzato x in indirizzo di posizione 5, &x sarebbe 5. Allo stesso modo è possibile negozio che affrontano in una variabile chiamata un puntatore :

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

volta che avete un puntatore è possibile dereferenziarlo utilizzando l'operatore * per convertirlo nuovamente dentro il tipo a cui punta :

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

Quando una variabile è accoppiata con l'operatore *, quella variabile contiene un indirizzo di memoria.

Quando è accoppiato con l'operatore &, restituisce l'indirizzo in cui è contenuta la variabile.

Se trovassi

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 

sia x e *y sarebbe resa 5