Kuba's answer explains why the first form does not work, but it does not address why the second form does work. That has been discussed in other questions
One can see that the head of the left-hand-side is evaluated in each of these cases:
ClearAll[a, b, c, x]
x = {a, b, c};
(# & @@ x)[1] = 1;
Extract[x, 2][1] = 2;
Last[x][1] = 3;
Definition[a, b, c]
a[1] = 1
b[1] = 2
c[1] = 3
Additionally the arguments are evaluated as seen in:
pats = {i_, j_, k_};
Last[x][First[pats]] = i^2;
c[4]
16
The LHS is not fully evaluated before assignment however; instead a special evaluation sequence is used.
With the definitions above in place if one separately evaluates:
Last[x][Last@pats]
k_^2
And if one manually attempts assignment to this it does not work:
k_^2 = 4;
Set::write: Tag Power in k_^2 is Protected. >>
However assigning to the compound expression:
Last[x][Last@pats] = 5;
c[1000]
5
? c
c[1] = 3
c[k_] = 5