es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el orden de ejecución es diferente en la suma y la resta?

Tengo una función que toma como argumento una dirección y cambia el valor del argumento. Pero cuando llamo a la función, el orden de ejecución es diferente en casos de suma y resta:

“`c++
#include <iostream>

using namespace std;

int fun(int *i) {
*i += 5;
return 4;
}

int main()
{
int x = 3;
x = x + fun(&x);
cout << "x: " << x << endl;

<pre><code>int y = 3;
y = y – fun(&y);
cout << "y: " << y << endl;

return 0;
</code></pre>

}

<pre><code><br />El resultado del código anterior es:

</code></pre>

x: 12

y: -1
“`

lo que significa que el valor de x se cambia primero en la función y luego se suma a sí mismo (esperaba que x fuera 7), pero los cambios en y no afectan a y antes del operador de resta.

¿Por qué está pasando esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Esto ocurre debido al orden de ejecución de los operadores. En el caso de x = x + fun(&x), el operador de suma se ejecuta antes de la llamada a la función. Por lo tanto, el valor de x se pasa primero a la función fun(), donde se incrementa en 5, y luego se agrega el valor de la llamada a la función (que es 4) al valor incrementado de x. Por lo tanto, x se convierte en 12.

    Por otro lado, en el caso de y = y - fun(&y), el operador de resta se ejecuta antes de la llamada a la función. Por lo tanto, el valor de y se pasa primero a la función fun(), donde se incrementa en 5, y luego se resta el valor de la llamada a la función (que es 4) al valor original de y. Por lo tanto, y se convierte en -1.

    Para evitar esta confusión, se recomienda evitar el uso de funciones que modifiquen y devuelvan valores al mismo tiempo, ya que puede conducir a resultados inesperados. En su lugar, separe la modificación y la devolución en dos funciones diferentes.

Comments are closed.