23

cで配列がどのように機能するのか疑問に思っていました。私は仮説に行き着き、私が正しいかどうか知りたいです。

配列は隣接するメモリ ケース (ボックス) のシーケンスであり、各ボックスはストックする型のサイズを持ちます (つまり、INT の場合、1 つのボックスのサイズは sizeof(int) であり、3 つの INT の配列は隣接する場所のメモリを占有します)。 3 sizeof(int) )

これで、特定の型の配列にメモリを動的に割り当てることができることもわかりました (C の malloc、C++ の新機能)。

私が不思議に思うのは、配列が原点に配列の最初のボックスのアドレスを持ち、ブラケット [0] で呼び出すときの最初の値 (後のボックスの値) が array[0] = であるという事実です。 = *(array+0) == *array (配列が "type * array" または "type array[]" または "type array[size]" として宣言されているかどうか) および "array" はそのように呼び出され、ポインターとして定義するか、配列 (「type * array」または「type array[]」または「type array[size]」) は、最初のボックスのアドレスです。

私は考えてしまい、これについて確認したいと思います: 配列は、角括弧 ([]) で宣言されていても、実際にはメモリ内に、それぞれが (アドレスとしてではなく値として) のアドレスを含む n 個のポインターのシーケンスです。実際の値を含むメモリ ボックス Bi + それらのメモリ ボックス (それぞれ実際の値を含む B0,...,Bn)。そして、「int array[5]」を宣言すると、プログラムは実際に int ポインタ P0、P1、..、P4 の 5 つの隣接するボックスと、コンピュータ メモリ B0、B1、全体に散在する 5 つの int サイズのメモリ場所を割り当てます。 ...,B4 ここで Pi の値は Bi のアドレスです

ここに画像の説明を入力

私は正しいか間違っていますか!?? ありがとうございました!

4

4 に答える 4