Según la tabla de precedencia del operador C++, la precedencia del incremento posterior es mayor que el operador de desreferencia (*), y el operador de preincremento y desreferencia tiene la misma precedencia. También el operador de preincremento y desreferencia son asociativos de derecha a izquierda.
Por lo tanto, en la primera línea (cout<<++*p<<std::endl;
), * y ++ se evalúan de derecha a izquierda (primera desreferencia, luego incremento). Ahora p
aún apunta a la primera matriz (porque no ha cambiado), pero (* p) apunta a la segunda letra de la primera cadena (el resultado muestra este hecho).
En segunda línea (cout<<*p++<<std::endl;
) sin embargo de incremento posterior se evalúa primero (después de recuperar el valor antiguo de p
) y la p
se incrementa y apunta ahora a la segunda matriz. Pero antes del incremento, el valor de p se usa en la expresión y la salida de la segunda línea es exactamente como la primera línea.
En la tercera línea, primero se desreferencia el p
(señale la primera letra de la segunda matriz), luego se incrementa (señale la segunda letra de la segunda matriz) y se imprime el valor.
La precedencia de operadores. Agregue algunos paréntesis y se aclarará ... – jrok