Giải thích được điều này khá dài dòng. Bạn phải hiểu được cách lưu trữ mảng trong bộ nhớ. Mảng a[20][30] thực ra là một mảng một chiều a[20*30].
1> a không thể gán vào pa được vì pa là mảng một chiều, trong khi đó pm là một mảng con trỏ nên có thể coi như tương đương với mảng 2 chiều vì một con trỏ coi như là mảng một chiều => có thể gán a vào pm.
2> Cái này chỉ đúng cho biến kiểu char thôi. Các kiểu khác ta phải nhân thêm cho size của nó nữa. a chứa địa chỉ của phần tử a[0][0], (A + i) là địa chỉ của con trỏ trỏ vào phần tử a[i][0]. *( A + i) là địa chỉ của a[i][0]. Địa chỉ này cộng thêm j nữa thì có địa chỉ của a[i][j]. *(*(A+i) + j) là giá trị của a[i][j].
Mình giải thích như vậy hy vọng là bạn hiểu.