The value of self.a is copied (because i32 implements Copy) to a temporary variable on the stack and then c is assigned a reference to that anonymous variable. For c to reference the a field the match needs to return that reference:
let c = match i {
1 => {
println!("Changing...");
&mut self.a
}
_ => panic!("Try 1!"),
};