参照とポインタの違いは、参照が自動的に逆参照されることです。したがって、のようなものは必要ありません*(a[2]) = 5。
次のコードはこれを示しています。
int baseVar = 42; // This
int &sameVar = baseVar; // and this are the same memory
// with two different names.
int *pBaseVar = &baseVar; // This is separate memory that happens
// to point to the baseVar memory.
またはのいずれかを変更すると、sameVarそれ自体*pBaseVarが変更baseVarされます。pBasevarそれ自体を変更しても影響はありませbasevarん。前者が別の場所を指すようにするだけです。
裏で(これはもちろん実装に依存しますbasevarが、おそらく(コンパイラ/コードによって)int特定のアドレス(たとえば0x12345678)にsameVarあると見なされ、それも考慮されます。
pBaseVarは(たとえば)のポインタと見なされ、0x11112222たまたま次の値 0x12345678が含まれています。
+------------+
pBaseVar (0x11112222) | 0x12345678 |--+
+------------+ |
+----------------------------------+
|
V +----+
baseVar (0x12345678) | 42 |
sameVar (same) | |
+----+