Недавно меня смутил следующий фрагмент кода c ++:
#include <cstdio>
int lol(int *k){
*k +=5;
return *k;
}
int main(int argc, const char *argv[]){
int k = 0;
int w = k + lol(&k);
printf("%d\n", w);
return 0;
}
Взгляните на строку:
int w = k + lol(&k);
До сих пор я думал, что это выражение будет вычисляться слева направо : взять текущее значение k (которое перед вызовом функции lol равно 0), а затем добавить его к результату функции lol.Но компилятор доказывает, что я ошибаюсь, значение w равно 10. Даже если я поменяю местами, чтобы сделать it
int w = lol(&k) + k;
результат будет по-прежнему 10. Что я делаю не так?
Tomek