Diferencia entre declaración int* p e int *p [duplicate]

3 minutos de lectura

avatar de usuario
Karthik

¿Cuál es la diferencia entre un int* p y un int *p ¿declaración?

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 intmientras que

int* a, b;

parece como si estuviera declarando dos punteros, cuando en realidad está haciendo lo mismo que arriba.

avatar de usuario
tony delroy

  • int* p

    • ampliamente utilizado por los programadores de C++
    • int* p, q implica erróneamente que ambos p y q 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 binario operator* ala 2 * 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 claramente p siendo un puntero y q 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.

avatar de usuario
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, *qlas cosas serán más sencillas.

De todos modos, puedes probar esto si insistes en acercarte a uno.

typedef int* intp;
intp p, q;

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad