Diferencia entre +****p, *p++ y *++p

Prediga la salida de los siguientes programas en C.
 

C

// PROGRAM 1
#include <stdio.h>
int main(void)
{
    int arr[] = {10, 20};
    int *p = arr;
    ++*p;
    printf("arr[0] = %d, arr[1] = %d, *p = %d",
                          arr[0], arr[1], *p);
    return 0;
}

C

// PROGRAM 2
#include <stdio.h>
int main(void)
{
    int arr[] = {10, 20};
    int *p = arr;
    *p++;
    printf("arr[0] = %d, arr[1] = %d, *p = %d",
                          arr[0], arr[1], *p);
    return 0;
}

C

// PROGRAM 3
#include <stdio.h>
int main(void)
{
    int arr[] = {10, 20};
    int *p = arr;
    *++p;
    printf("arr[0] = %d, arr[1] = %d, *p = %d",
                          arr[0], arr[1], *p);
    return 0;
}

La salida de los programas anteriores y todos los programas similares se puede adivinar fácilmente recordando las reglas simples sobre los operadores postfijo ++, prefijo ++ y * (desreferencia) 
1) La precedencia del prefijo ++ y * es la misma. La asociatividad de ambos es de derecha a izquierda. 
2) La precedencia del sufijo ++ es mayor que la de * y el prefijo ++. La asociatividad de postfix ++ es de izquierda a derecha.
(Consulte: Tabla de precedencia )
La expresión ++*p tiene dos operadores de la misma precedencia, por lo que el compilador busca asociatividad. La asociatividad de los operadores es de derecha a izquierda. Por lo tanto, la expresión se trata como ++(*p) . Por lo tanto, la salida del primer programa es » arr[0] = 11, arr[1] = 20, *p = 11 «.
La expresión *p++ se trata como *(p++) ya que la precedencia del sufijo ++ es mayor que *. Por lo tanto, la salida del segundo programa es » arr[0] = 10, arr[1] = 20, *p = 20 «.
La expresión *++p tiene dos operadores de la misma precedencia, por lo que el compilador busca asociatividad. La asociatividad de los operadores es de derecha a izquierda. Por lo tanto, la expresión se trata como *(++p) . Por lo tanto, la salida del tercer programa es » arr[0] = 10, arr[1] = 20, *p = 20 «.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *