C言語

【C言語】第4章第3回:ポインタを使った変数の操作

ポインタを活用すると、変数の値を直接操作したり、効率的にデータを操作したりできます。この章では、ポインタを使った変数操作の具体的な方法を学びます。

1. ポインタを使って変数の値を変更する

ポインタを使用すると、変数のアドレスを通じてその値を変更することができます。

例:ポインタを使った値の変更

#include <stdio.h>

int main() {
    int number = 10;
    int *ptr = &number; // numberのアドレスをptrに格納

    printf("Before modification: %d\n", number);

    *ptr = 20; // ポインタを使って値を変更
    printf("After modification: %d\n", number);

    return 0;
}

解説:

  • *ptrは、ポインタが指すアドレスの値を操作します。
  • この方法で、ポインタを使って変数の値を直接変更することができます。

2. ポインタを使ったスワップ操作

ポインタを使うと、2つの変数の値を効率的に入れ替えることができます。

例:ポインタを使ったスワップ関数

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 5, y = 10;

    printf("Before swap: x = %d, y = %d\n", x, y);
    swap(&x, &y); // アドレスを渡す
    printf("After swap: x = %d, y = %d\n", x, y);

    return 0;
}

解説:

  • スワップ関数は、ポインタを使って2つの値を入れ替えます。
  • 呼び出し元の変数も、変更内容が反映されます。

3. ポインタを使った配列操作

ポインタは、配列の操作にも有効です。ポインタを使うことで、配列要素にアクセスしたり、値を変更したりできます。

例:ポインタで配列要素を操作

#include <stdio.h>

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int *ptr = numbers; // 配列の先頭アドレスを取得

    for (int i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, *(ptr + i)); // ポインタを使ってアクセス
    }

    *(ptr + 2) = 99; // 3番目の要素を変更

    printf("After modification:\n");
    for (int i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }

    return 0;
}

解説:

  • int *ptr = numbers;: 配列の先頭アドレスをポインタに格納。
  • *(ptr + i): ポインタ演算を使って配列要素にアクセス。
  • ポインタを使うことで、配列の値を効率的に操作できます。

4. 練習問題

以下の課題に挑戦して、ポインタを使った変数操作のスキルを向上させましょう。

  1. ポインタを使って、3つの整数の値を入力し、それらを昇順に並び替えるプログラムを作成してください。
  2. 配列をポインタで操作し、全要素を2倍にするプログラムを作成してください。
  3. 文字列をポインタで逆順に出力するプログラムを作成してください。

5. 練習問題の解答と解説

問1の解答

#include <stdio.h>

void sortAscending(int *a, int *b, int *c) {
    if (*a > *b) { int temp = *a; *a = *b; *b = temp; }
    if (*a > *c) { int temp = *a; *a = *c; *c = temp; }
    if (*b > *c) { int temp = *b; *b = *c; *c = temp; }
}

int main() {
    int x, y, z;

    printf("Enter three integers: ");
    scanf("%d %d %d", &x, &y, &z);

    sortAscending(&x, &y, &z);
    printf("Sorted order: %d %d %d\n", x, y, z);

    return 0;
}

6. まとめ

ポインタを使った変数操作は、C言語プログラミングにおける強力なツールです。ポインタを正しく活用し、効率的なコードを書くスキルを磨きましょう。