Cpp の配列ポインターの明確化

Cpp の配列ポインターを明確にするための解決策
以下に示します:

だから私は現在 C++ を学んでいて、私が思いついたことについて説明したいだけです.

配列 int arr[] = {1, 2, 3}; があるとします .
int *arr_p = arr です int *arr_p = &arr[0] と同じ ?
私の知る限り、arr 最初の要素を指しているため、型は int * です 、一方 &arr 異なる型の配列全体へのポインタです。
同じアドレス、異なる型。

ポインターの振る舞いがやや非論理的に感じられますが、ますます慣れてきていると思います.
よろしくお願いします.

3 つの int の配列へのポインターは、次のように記述できます。

int arr[3] = {2, 4, 6};

int (*Parr)[3] = arr;

Parr を逆参照すると、配列の最初の要素ではなく、配列全体に実際にアクセスできます。したがって、あなたは書くことができます、

std::cout << (*Parr)[2] << std::endl;

これにより、配列の最後の要素 (6) にアクセスできます。かっこを使用して間接参照し、インデックスを使用することにより、優先順位を使用することを忘れないでください。