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