2011-05-13 11 views
16

Si tengo una estructura comoDiferencia entre -> y. en una estructura?

struct account { 
    int account_number; 
}; 

Entonces ¿cuál es la diferencia entre hacer

myAccount.account_number; 

y

myAccount->account_number; 

o no hay una diferencia?

Si no hay diferencia, ¿por qué no debería simplemente usar la notación . en lugar de ->? -> parece tan desordenado.

Respuesta

22

-> es una abreviatura de (*x).field, donde x es un puntero a una variable de tipo struct account y field es un campo en la estructura, tales como account_number.

Si usted tiene un puntero a una estructura, a continuación, diciendo

accountp->account_number; 

es mucho más concisa que

(*accountp).account_number; 
1

-> es una referencia a un puntero y. descriptor de acceso combina

2

Si myAccount es un puntero, utilice esta sintaxis:

myAccount->account_number; 

Si no es así, utilice éste en su lugar:

myAccount.account_number; 
5

Se utiliza la notación diferente en función de si la izquierda lado de la mano es un objeto o un puntero.

// correct: 
struct account myAccount; 
myAccount.account_number; 

// also correct: 
struct account* pMyAccount; 
pMyAccount->account_number; 

// also, also correct 
(*pMyAccount).account_number; 

// incorrect: 
myAccount->account_number; 
pMyAccount.account_number; 
+0

Gracias Rob, ¡aceptaría tu respuesta también si pudiera! – Sam

14

Usa . cuando se trata de variables. Utiliza -> cuando se trata de punteros.

Por ejemplo:

struct account { 
    int account_number; 
}; 

declarar una nueva variable de tipo struct account:

struct account s; 
... 
// initializing the variable 
s.account_number = 1; 

Declarar a como un puntero a struct account:

struct account *a; 
... 
// initializing the variable 
a = &some_account; // point the pointer to some_account 
a->account_number = 1; // modifying the value of account_number 

Usando a->account_number = 1; es una sintaxis alternativa para (*a).account_number = 1;

Espero que esto ayude.

Cuestiones relacionadas