[C con Clase] precedencia

Steven Davidson steven en conclase.net
Mie Mayo 9 04:53:24 CEST 2007


Hola Rodolfo,

El pasado 2007-05-09 02:07:58, rodolfo escribió:

r> Como estan jovenes, yo reapareciendo con esta preguntita teorica:
r>     char cadena1[] = "quien ";
r>     char *ptrC = cadena1;
r>     cout << *ptrC++ << endl;
r>     cout << ptrC << endl;
r> resultado de la corrida:
r> q
r> uien
r> pregunta:  si en las tablas de precedencia, el operador unario de 
r> posincremento ++, tiene mayor nivel de precedencia que el operador de 
r> desreferencia *,  y este a su vez, tiene mayor nivel que el de 

Bueno, técnicamente esto no es cierto. Los operadores unitarios de post-incremento y de "desreferencia" están en el mismo nivel de preferencia. Para poder discriminar el orden de evaluación, aplicamos la regla de asociación (o asociatividad). Como tal asociación se hace de derecha a izquierda, entonces como bien dices, se evalúa el operador de post-incremento y luego el de "desreferencia".

r> desplazamiento <<,  ¿ porque razón no se incrementa primero, luego se 
r> desreferencia y   al final se muestra?

Y así se hace la evaluación de los operadores. Lo que pasa es que el efecto del incremento es póstumo, pero su evaluación se hace primero. Si quieres que se incremente en ese momento, entonces usa el operador de pre-incremento. Esto sería,

cout << *++ptrC << endl;
cout << ptrC << endl;

Sin embargo, el efecto es diferente, ya que aparecerá en pantalla lo siguiente:
u
uien


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase