参照とポインタの違いは、参照が自動的に逆参照されることです。したがって、のようなものは必要ありません*(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) | |
+----+