Я искал следующий код:
#include <stdint.h>
void foo(uint32_t *pVal)
{
uint32_t i = 8;
*pVal = i *= 10;
}
На первый взгляд ясно, что перед возвратом из foo()
значение *pVal
будет равно 80, а также значение i
. И это действительно то, что происходит согласно godbolt.org :
foo: # @foo
push rbp
mov rbp, rsp
mov qword ptr [rbp - 8], rdi
mov dword ptr [rbp - 12], 8
imul eax, dword ptr [rbp - 12], 10
mov dword ptr [rbp - 12], eax
mov rdi, qword ptr [rbp - 8]
mov dword ptr [rdi], eax
pop rbp
ret
Однако после проверки приоритета оператора из здесь , приоритет =
выше, чем приоритет *=
, поэтому кажется, что значение *pVal
должно быть 8, а значение i
должно быть 80 ...
Что мне здесь не хватает?
EDIT
В дополнение к великолепному ответу melpomene , есть также хорошая страница Википедии .