Приоритет оператора в C - возвращение значения - PullRequest
5 голосов
/ 05 декабря 2011

У меня есть это утверждение:

return *local_stack_var2++ + 42;

Были бы правильные шаги при его разборе:
1. Разыменование local_stack_var2
2. Добавьте 42 к разыменованному local_stack_var2 (функция на самом деле вернет это значение)
3. Перед завершением функции она активирует постинкремент, увеличивая значение объекта, на которое указывает local_stack_var2

Так что в формате кода это будет выглядеть примерно так?

int temp = *local_stack_var2 //step 1;  
int returnValue = temp + 42; //step 2, compiler will return THIS value     
*local_stack_var2 = *local_stack_var2 + 1; //step 3 
 return returnValue;

Спасибо!

1 Ответ

8 голосов
/ 05 декабря 2011

Close, но ++ (postincrement) имеет более высокий приоритет, чем унарный *, поэтому это происходит первым.Порядок операций будет следующим:

  1. Постинкрементное увеличение local_stack_var2, так что оно увеличивается на единицу, но выражение оценивается как исходное значение, а не приращенное значение
  2. Разыменование этого оригиналазначение
  3. прибавить 42 к полученному разыменованием вышеупомянутого исходного значения
  4. вернуть это значение

Таким образом, в коде это будет как (не точно, но близко)

int* temp = local_stack_var2;
local_stack_var2 = local_stack_var2 + 1;
int retval = *temp;
reval = retval + 42;
return retval;
...