2011-10-17 5 views
5

Sono abbastanza nuovo in C e non so la differenza tra le due seguenti dichiarazioni di variabili:Qual è la differenza tra int * ptr e int * ptr in C?

int* ptr; 
int *ptr; 

Credo che nella dichiarazione int* ptr;, valore ptr s' non può essere modificato, mentre può essere modificato per la dichiarazione, int *ptr;

Non sono sicuro che sia così.

Per favore aiutami a capire il concetto dietro le due dichiarazioni.

+0

possibile duplicato di [C: c'è una differenza tra "int \ * fooBar;" e "int \ * fooBar;"?] (http://stackoverflow.com/questions/2093459/c-is-there-a-difference-between-int-foobar-and-int-foobar) e [Differenza tra int \ * i e int \ * i] (http://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i), [Differenza tra int \ * p e int \ * p dichiarazione ] (http://stackoverflow.com/questions/5590150/difference-between-int-p-and-int-p-declaration) insieme ad almeno una dozzina di altri. –

+0

http://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i –

risposta

23

Al compilatore non c'è differenza tra le due dichiarazioni.

Per il lettore umano, il primo può implicare che il tipo "int *" si applica a tutte le dichiarazioni nella stessa istruzione. Tuttavia, il * si lega solo al seguente identificatore.

Ad esempio, entrambe le seguenti istruzioni dichiarano un solo puntatore.

int* ptr, foo, bar; 
int *ptr, foo, bar; 

Questa istruzione dichiara più puntatori, che impedisce l'uso della spaziatura "int *".

int *ptr1, *ptr2, *ptr3; 
4

Gli spazi in Do sono per lo più insignificanti. Ci sono casi occasionali in cui gli spazi sono importanti, ma questi sono pochi e distanti tra loro. I due esempi che hai pubblicato sono equivalenti.

2

Come gli altri hanno detto. Non c'è differenza. Se vuoi capire una dichiarazione di tipo C più complessa, potresti trovare questo link utile. Reading C declarations.

1

int *p;

*p 


è alcun significato per il compilatore, (int*) is a type named pointer.