2011-10-17 21 views
5

Soy bastante nuevo en C y no sé la diferencia entre las dos siguientes declaraciones de variables:¿Cuál es la diferencia entre int * ptr e int * ptr en C?

int* ptr; 
int *ptr; 

Creo que en la declaración int* ptr;, ptr 's valor no se puede cambiar mientras que puede ser cambiado para la declaración, int *ptr;

No estoy seguro si eso es todo.

Por favor, ayúdame a entender el concepto detrás de las dos declaraciones.

+0

posible duplicado de [C: hay una diferencia entre "int \ * fooBar;" y "int \ * fooBar;"?] (http://stackoverflow.com/questions/2093459/c-is-there-a-difference-between-int-foobar-and-int-foobar) y [Diferencia entre int \ * i y int \ * i] (http://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i), [Diferencia entre int \ * p y int \ * p declaración ] (http://stackoverflow.com/questions/5590150/difference-between-int-p-and-int-p-declaration) junto con al menos una docena de otros. –

+0

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

Respuesta

23

Para el compilador, no hay diferencia entre las dos declaraciones.

Para el lector humano, el primero puede implicar que el tipo "int *" se aplica a todas las declaraciones en la misma instrucción. Sin embargo, el * se une solo al siguiente identificador.

Por ejemplo, las dos afirmaciones siguientes declaran solo un puntero.

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

Esta instrucción declara múltiples punteros, lo que impide utilizar el espaciado "int *".

int *ptr1, *ptr2, *ptr3; 
4

Los espacios en C son en su mayoría insignificantes. Hay casos ocasionales en los que los espacios son importantes, pero estos son pocos y distantes. Los dos ejemplos que publicaste son equivalentes.

2

Como dijeron los demás. No hay diferencia. Si desea comprender declaraciones de tipo C más complejas, puede encontrar este enlace útil. Reading C declarations.

1

int *p;

*p 


es ningún significado para el compilador, (int*) is a type named pointer.

Cuestiones relacionadas