TECH I.S.

C ポインターと配列


ポインターと配列

ポインタを使用してアクセスすることもできます配列.

次の整数の配列を考えてみましょう。

int myNumbers[4] = {25, 50, 75, 100};

あなたはから学びました配列の章を使用して配列要素をループできることforループ:

int myNumbers[4] = {25, 50, 75, 100}; int i; for (i = 0; i < 4; i++) {   printf("%d\n", myNumbers[i]); }

結果:

255075100

自分で試してみる »

各配列要素の値を出力する代わりに、各配列要素のメモリ アドレスを出力しましょう。

int myNumbers[4] = {25, 50, 75, 100}; int i; for (i = 0; i < 4; i++) {   printf("%p\n", &myNumbers[i]); }

結果:

0x7ffe70f9d8f00x7ffe70f9d8f40x7ffe70f9d8f80x7ffe70f9d8fc

自分で試してみる »

各要素のメモリ アドレスの最後の番号が異なり、4 が追加されていることに注意してください。

のサイズだからです。inttype は通常 4 バイトです。次のことを覚えておいてください。

// Create an int variable int myInt; // Get the memory size of an int printf("%lu", sizeof(myInt));

結果:

4

自分で試してみる »

したがって、上記の「メモリ アドレスの例」から、コンパイラが配列要素ごとに 4 バイトのメモリを予約していることがわかります。これは、配列全体が 16 バイト (4 * 4) のメモリ ストレージを占有することを意味します。

int myNumbers[4] = {25, 50, 75, 100}; // Get the size of the myNumbers array printf("%lu", sizeof(myNumbers));

結果:

16

自分で試してみる »


ポインターは配列にどのように関連していますか

では、ポインタと配列の関係は何ですか?さて、Cでは、配列の名前、実際にはポインター最初の要素アレイの。

混乱している?これをよりよく理解し、上記の「メモリ アドレスの例」をもう一度使用してみましょう。

メモリアドレス最初の要素と同じです配列の名前:

int myNumbers[4] = {25, 50, 75, 100}; // Get the memory address of the myNumbers array printf("%p\n", myNumbers); // Get the memory address of the first array element printf("%p\n", &myNumbers[0]);

結果:

0x7ffe70f9d8f00x7ffe70f9d8f0

自分で試してみる »

これは基本的に、ポインターを介して配列を操作できることを意味します!

どうやって? myNumbers は myNumbers の最初の要素へのポインターであるため、*それにアクセスする演算子:

int myNumbers[4] = {25, 50, 75, 100}; // Get the value of the first element in myNumbers printf("%d", *myNumbers);

結果:

25

自分で試してみる »

myNumbers の残りの要素にアクセスするには、ポインター/配列をインクリメントします (+1、+2 など)。

int myNumbers[4] = {25, 50, 75, 100}; // Get the value of the second element in myNumbers printf("%d\n", *(myNumbers + 1)); // Get the value of the third element in myNumbers printf("%d", *(myNumbers + 2)); // and so on..

結果:

5075

自分で試してみる »

またはそれをループします:

int myNumbers[4] = {25, 50, 75, 100}; int *ptr = myNumbers; int i; for (i = 0; i < 4; i++) {   printf("%d\n", *(ptr + i)); }

結果:

255075100

自分で試してみる »

ポインターを使用して配列要素の値を変更することもできます。

int myNumbers[4] = {25, 50, 75, 100}; // Change the value of the first element to 13 *myNumbers = 13; // Change the value of the second element to 17 *(myNumbers +1) = 17; // Get the value of the first element printf("%d\n", *myNumbers); // Get the value of the second element printf("%d\n", *(myNumbers + 1));

結果:

1317

自分で試してみる »

配列を操作するこの方法は、少し過剰に思えるかもしれません。特に上記の例のような単純な配列では。ただし、大きな配列の場合は、ポインターを使用して配列にアクセスして操作する方がはるかに効率的です。

また、アクセスが高速で簡単であると考えられています二次元配列ポインタ付き。

また、文字列は実際には配列であるため、ポインターを使用してアクセスすることもできます文字列.

今のところ、これがどのように機能するかを知っていることは素晴らしいことです。ただし、前の章で指定したように。ポインタは慎重に扱う必要があります、メモリに保存されている他のデータを上書きする可能性があるためです。



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細