2011-04-08 10 views

Respuesta

31

Hay sin diferencia.

Es una cuestión de notación , no semántica. La segunda es menos engañosa, porque

int *a, b; 

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

int* a, b; 

parece como si se trata de declarar dos punteros, cuando es realmente haciendo lo mismo que el anterior .

+0

buena explicación – cc4re

3

Las dos declaraciones son equivalentes al declarar un único puntero. Para un poco más en esto vea link

17

Es una buena pregunta.

  • int* p

    • ampliamente utilizado por los programadores de C++
    • int* p, q implica erróneamente que tanto p y q son punteros (que conduce a una preferencia para la declaración de este en dos líneas, que también mejora la legibilidad cuando hay son asignaciones, y hace que sea más fácil cortar/pegar rápidamente o comentar líneas/variables específicas)
    • int* p separe visualmente Ates el tipo del identificador
    • *p a continuación indica de manera inequívoca una falta de referencia (suponiendo que pones espacios alrededor de su 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 bit a bit-operador AND
  • int *p

    • utilizan ampliamente d por los programadores de C
    • int *p, q claramente refleja p siendo un puntero y q que no es.
    • int *p confunde visualmente el tipo con el identificador
    • visualmente indistinguible de una referencia a un puntero (para mejor o peor)

mismo modo para los tipos que aparecen en las declaraciones de funciones ...

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 función no pueden ponerse tan peludos: la especificación de tipo comienza de nuevo después de cada separador de coma.

Sumariamente, int *p es mejor si su estilo/código-base de codificación utiliza múltiples declaraciones 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 principalmente en lo que están acostumbrados.

0

¡esas 2 declaraciones son exactamente iguales!

Cuestiones relacionadas