just use @(addr), which will detect changes of any bit inside addr.
An edge event shall be detected only on the LSB of the expression. So @(posedge addr) only detects addr[0].
An implicit event shall be detected on any change in the value of the expression. So @(addr) detects the change of any bits of addr.
$changed() is used inside antecedent and the consequent in the assertion sequence to see whether the sampled value changed. So it needs a sampling clock before.
You cannot use it in the expression inside the event control statement like @($change(addr)) because there are no clock domain for $change(addr) to refer to.