ポインタと配列の関連付けと前方走査
このステップでは、ポインタと配列を関連付け、その後ポインタを使って配列を前方に走査します。
ポインタを配列に関連付ける
C言語では、インデックスが付いていない配列名は、配列の最初の要素のアドレスを表します。これは、このアドレスを直接ポインタ変数に代入できることを意味します。
main.c
ファイルを変更して、ポインタを配列に関連付け、配列を走査しましょう。
#include <stdio.h>
int main() {
printf("Array Traversal using Pointers\n\n");
// Declare and initialize an array of 5 integers
int arr[5] = {10, 20, 30, 40, 50};
// Declare a pointer of integer type
int *ptr;
// Assign the address of the first element of the array to the pointer
ptr = arr; // This is equivalent to ptr = &arr[0]
// Print the array elements using array notation
printf("Array elements using array notation:\n");
for(int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
// Print the array elements using pointer notation
printf("\nArray elements using pointer notation (forward traversal):\n");
for(int i = 0; i < 5; i++) {
printf("*(ptr + %d) = %d\n", i, *(ptr + i));
}
return 0;
}
この更新されたコードでは、以下のことを行っています。
- 配列
arr
の最初の要素のアドレスをポインタptr
に代入しました。
- ポインタ演算を使って配列を走査する新しいループを追加しました。
- 式
*(ptr + i)
は、メモリ位置ptr + i
にある値にアクセスします。i
が0のときは配列の最初の要素、i
が1のときは2番目の要素、といった具合です。
プログラムをコンパイルして実行し、結果を確認しましょう。
gcc main.c -o main
./main
次の出力が表示されるはずです。
Array Traversal using Pointers
Array elements using array notation:
arr[0] = 10
arr[1] = 20
arr[2] = 30
arr[3] = 40
arr[4] = 50
Array elements using pointer notation (forward traversal):
*(ptr + 0) = 10
*(ptr + 1) = 20
*(ptr + 2) = 30
*(ptr + 3) = 40
*(ptr + 4) = 50
両方の方法で同じ出力が得られることに注意してください。これは、ポインタ演算を使って、従来の配列インデックスと同じように配列要素にアクセスできることを示しています。