Diferencia entre int * p y int * p statement

¿Podría decirme la diferencia entre las declaraciones int* p y int *p ?

No hay diferencia .

Es una cuestión de notación , no de semántica . El segundo es menos engañoso , porque

 int *a, b; 

está claramente declarando un int* y un int , mientras que

 int* a, b; 

Parece que está declarando dos punteros, cuando en realidad está haciendo lo mismo que arriba.

Es una buena pregunta.

  • int* p

    • ampliamente utilizado por los progtwigdores de C ++
    • int* p, q implica incorrectamente que tanto p como q son punteros (lo que lleva a una preferencia para declarar esto en dos líneas, lo que también mejora la legibilidad cuando hay asignaciones, y facilita el corte / pegado o el comentario rápido de líneas / variables específicas )
    • int* p separa visualmente el tipo del identificador
    • *p entonces indica inequívocamente una falta de referencia (suponiendo que coloque espacios alrededor de su operator* binario operator* ala 2 * 3 )
    • en C ++ ...&x está tomando claramente una dirección, mientras que ...& x debe declarar una variable de referencia, y ... & ... es el operador AND a bit
  • int *p

    • ampliamente utilizado por los progtwigdores de C
    • int *p, q refleja claramente que p es un puntero y q no lo es.
    • int *p confunde visualmente el tipo con el identificador
    • visualmente indistinguible de una desreferencia de puntero (para bien o para mal)

Del mismo modo para los tipos que aparecen en las declaraciones de función …

 int* f(), g(); // declares int g(); int *h(), (*i)(); // i is pointer to function returning int int *const*m(), n(); // m returns pointer to (const-pointer to int) // n returns int 

… pero al menos los argumentos de la función no pueden ser tan complicados: la especificación de tipo comienza de nuevo después de cada separador de coma.

En resumen, int *p es mejor si su estilo de encoding / base de código utiliza declaraciones múltiples en una sola línea de código fuente, de lo contrario int* p ofrece una separación más clara de tipo y el siguiente identificador.

Por todo eso, las preferencias de las personas se basan en gran medida en lo que están acostumbrados.

Las dos declaraciones son equivalentes cuando se declara un solo puntero. Para más información sobre este enlace.

¡Esas 2 declaraciones son exactamente iguales!