Dichiarazioni di variabili di tipo puntatore

  1. quando si dichiarano più variabili puntatori insieme, * va ripetuto su tutte
  2. tranne quando si usa typedef

Rispetto alle variabili di tutti gli altri tipi, le dichiarazioni di variabili di tipo puntatore hanno delle regole diverse. Infatti, mentre per tutti gli altri tipi si può fare:

  Tipo a, b, c;

e questo dichiara tre variabili di tipo Tipo, nel caso dei puntatori il risultato è differente. La dichiarazione:

  int * a, b, c;

Ha come risultato che la sola variabile a è un puntatore a intero, mentre b e c sono variabili intere. Per dichiarare tutte e tre le variabili come puntatori, occorre fare:

  int *a, *b, *c;

ossia, si deve mettere l'asterisco * davanti a ognuna delle variabili. La regola per la dichiarazione dei puntatori è semplicemente che un asterisco davanti a una variabile dichiara la variabile (e solo quella) come un puntatore. Quindi, se si fa:

  float *x, y, *z;

le variabili x e z sono puntatori a float, dato che sono precedute da un asterisco. La variabile y invece, non avendo * davanti, non è un puntatore ma una variabile di tipo float. Eventuali spazi fra il nome del tipo, l'asterisco, la variabile e le virgole sono ignorati.

Una cosa importante da notare è che nel caso in cui si definisce un tipo puntatore usando la typedef, in nuovo tipo segue invece la regola generale. In altre parole, se si fa:

typedef int * punt;

punt a, b, c;

Allora il tipo punt è equivalente al tipo int *. L'unica differenza è che la dichiarazione delle variabili a, b e c le definisce tutte e tre del tipo punt, ossia sono tutte e tre puntatori a interi.