¿Cuál es la diferencia entre un int* p
y un int *p
¿declaración?
Diferencia entre declaración int* p e int *p [duplicate]
Karthik
Hay ninguna diferencia.
Es una cuestión de notaciónno semántica. el segundo es menos engañosoporque
int *a, b;
está declarando claramente un int*
y un int
mientras que
int* a, b;
parece como si estuviera declarando dos punteros, cuando en realidad está haciendo lo mismo que arriba.
tony delroy
-
int* p
- ampliamente utilizado por los programadores de C++
int* p, q
implica erróneamente que ambosp
yq
son punteros (lo que lleva a una preferencia por declarar esto en dos líneas, lo que también mejora la legibilidad cuando hay asignaciones y facilita cortar/pegar o comentar líneas/variables específicas rápidamente)int* p
separa visualmente el tipo del identificador*p
luego indica inequívocamente una desreferencia (suponiendo que ponga espacios alrededor de su binariooperator*
ala2 * 3
)- en C++
...&x
claramente está tomando una dirección mientras...& x
debe estar declarando una variable de referencia, y... & ...
es el operador AND bit a bit
-
int *p
- ampliamente utilizado por los programadores de C
int *p, q
refleja claramentep
siendo un puntero yq
no ser.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 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 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 codificación / base de código 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 en gran medida en lo que están acostumbrados.
usuario26742873
Ellos son iguales. El primero considera p
como un int *
tipo, y el segundo considera *p
como un int
.
El segundo le dice cómo funcionan simplemente las declaraciones de C: declarar como se usaría.
Internet está inundado de enfoques complejos para analizar declaraciones como “regla de las agujas del reloj/espiral” y “la regla de la derecha”. La gente hace que lo simple sea complejo: ¿por qué necesitamos leer estos tipos en voz alta? ¡Solo necesitamos saber cómo usarlo!
Por cierto, el primero a veces te hace enojar. Considera esto:
int* p, q;
Te gustaría p
y q
ambos se convierten int *
pero lamentablemente no.
Si tú escribes int *p, *q
las cosas serán más sencillas.
De todos modos, puedes probar esto si insistes en acercarte a uno.
typedef int* intp;
intp p, q;