【C言語】ポインタが難しいワケや学習するコツ

目次から探す

ポインタを使った実践的なプログラミングの例

ポインタはC言語において非常に重要な概念であり、実践的なプログラミングにおいても頻繁に使用されます。

ここでは、ポインタを使った実践的なプログラミングの例をいくつか紹介します。

配列の要素を入れ替えるプログラム

配列の要素を入れ替えるプログラムは、ポインタを使うことで効率的に要素の値を交換することができます。

以下に、ポインタを使って配列の要素を入れ替えるプログラムの例を示します。

#include <stdio.h>
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    printf("入れ替え前の配列: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    // 要素の入れ替え
    swap(&arr[0], &arr[4]);
    printf("\n入れ替え後の配列: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

上記のプログラムでは、swap関数を定義しています。

この関数は、引数として2つのポインタを受け取り、そのポインタが指す値を入れ替える役割を果たします。

main関数では、配列の要素を入れ替えるためにswap関数を呼び出しています。

実行結果は以下のようになります。

入れ替え前の配列: 1 2 3 4 5
入れ替え後の配列: 5 2 3 4 1

文字列の逆順を出力するプログラム

文字列の逆順を出力するプログラムも、ポインタを使って効率的に処理することができます。

以下に、ポインタを使って文字列の逆順を出力するプログラムの例を示します。

#include <stdio.h>
#include <string.h>
void reverseString(char *str) {
    int length = strlen(str);
    char *start = str;
    char *end = str + length - 1;
    while (start < end) {
        char temp = *start;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }
}
int main() {
    char str[] = "Hello, World!";
    printf("逆順の文字列: ");
    reverseString(str);
    printf("%s", str);
    return 0;
}

上記のプログラムでは、reverseString関数を定義しています。

この関数は、引数として文字列の先頭アドレスを受け取り、その文字列を逆順にする役割を果たします。

main関数では、文字列を逆順にするためにreverseString関数を呼び出しています。

実行結果は以下のようになります。

逆順の文字列: !dlroW ,olleH

動的メモリの確保と解放を行うプログラム

動的メモリの確保と解放は、ポインタを使って行う必要があります。

以下に、ポインタを使って動的メモリの確保と解放を行うプログラムの例を示します。

#include <stdio.h>
#include <stdlib.h>
int main() {
    int size;
    int *arr;
    printf("配列のサイズを入力してください: ");
    scanf("%d", &size);
    // メモリの確保
    arr = (int *)malloc(size * sizeof(int));
    if (arr == NULL) {
        printf("メモリの確保に失敗しました");
        return 1;
    }
    printf("要素を入力してください: ");
    for (int i = 0; i < size; i++) {
        scanf("%d", &arr[i]);
    }
    printf("入力された要素: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    // メモリの解放
    free(arr);
    return 0;
}

上記のプログラムでは、malloc関数を使って動的にメモリを確保しています。

確保したメモリは、ポインタarrに格納されます。

free関数を使ってメモリを解放することで、不要なメモリの使用を避けることができます。

実行結果は以下のようになります。

配列のサイズを入力してください: 5
要素を入力してください: 1 2 3 4 5
入力された要素: 1 2 3 4 5

以上がポインタを使った実践的なプログラミングの例です。

ポインタを使うことで、より効率的なプログラムを作成することができますので、ぜひ活用してみてください。

1 2 3
目次から探す