¿Alguien puede explicarme la salida?
#include<stdio.h> int main() { int a[]={10,20,30}; int *p=a; ++*p++; printf("%d %d %d %d",*p,a[0],a[1],a[2]); }la salida es 20 11 20 30
El incremento de sufijo tiene una precedencia más alta, por lo que el valor del segundo índice debería haberse incrementado. ¿Por qué se incrementa el valor del primer índice?
Debido a la precedencia del operador ,
++*p++ es lo mismo que ++(*(p++)) .
Eso es equivalente a:
int* p1 = p++; // p1 points to a[0], p points to a[1] ++(*p1); // Increments a[0]. It is now 11.Eso explica la salida.
Esto se debe a que el operador sufijo devuelve el valor antes del incremento. Entonces, el puntero está bien incrementado, pero el operador de prefijo aún se aplica al valor del puntero original.