交換ロジックの実装
では、ポインタを使用して実際の交換ロジックを実装しましょう。
ポインタにアドレスを割り当てる
まず、a と b のアドレスをそれぞれ ptra と ptrb に割り当てることで、ポインタが変数を指すようにします。
// ポインタにアドレスを割り当てる
ptra = &a;
ptrb = &b;
ポインタを使用した交換アルゴリズム
ポインタを使って値を交換するキーは、ポインタ自体ではなく、メモリ位置にある値を操作することです。以下のように行います。
a の値(*ptra を介してアクセス)を一時変数 temp に格納する
b の値(*ptrb を介してアクセス)を a に割り当てる(*ptra を使用)
- 一時的な値(
a の元の値)を b に割り当てる(*ptrb を使用)
前のステップで指示された場所に次のコードを追加して、main.c ファイルを更新します。
#include <stdio.h>
int main() {
// 変数を宣言する
int a, b;
int *ptra, *ptrb;
int temp;
// ユーザーから入力を取得する
printf("Enter value for a: ");
scanf("%d", &a);
printf("Enter value for b: ");
scanf("%d", &b);
// 元の値を表示する
printf("\nOriginal values:\n");
printf("a = %d\n", a);
printf("b = %d\n", b);
// ポインタにアドレスを割り当てる
ptra = &a;
ptrb = &b;
// メモリアドレスを表示する(オプションだが理解に役立つ)
printf("\nMemory addresses:\n");
printf("Address of a: %p\n", ptra);
printf("Address of b: %p\n", ptrb);
// ポインタを使用して値を交換する
temp = *ptra; // a の値を temp に格納する
*ptra = *ptrb; // b の値を a に割り当てる
*ptrb = temp; // a の元の値を b に割り当てる
// 交換後の値を表示する
printf("\nAfter swapping:\n");
printf("a = %d\n", a);
printf("b = %d\n", b);
return 0;
}
交換ロジックの理解
交換がどのように機能するかを正確に理解しましょう。
temp = *ptra; - * 演算子はポインタを間接参照し、メモリ位置にある値にアクセスします。この行は a の値を temp に格納します。
*ptra = *ptrb; - これは b の値を a のメモリ位置に割り当て、実質的に a の値を変更します。
*ptrb = temp; - これは a の元の値(temp に格納されている)を b のメモリ位置に割り当て、交換を完了します。
これらの操作の後、変数 a と b は直接変更することなく値を交換しました。メモリ位置にある値のみを変更しました。