ポインターを使用して配列を反転する C プログラム

配列内の要素を入力し、ポインターを使用して配列を反転する C プログラムを作成します。 C プログラミングでポインターを使用して配列を逆にする方法。 C でポインターを使用して配列を反転するロジック。

入力

Input array elements: 10 20 30 40 50 60 70 80 90 100

出力

Reversed array: 100 90 80 70 60 50 40 30 20 10

必要な知識

基本的な C プログラミング、配列、ポインター、ポインター演算、ポインターと配列

ポインタを使用して配列を逆にするロジック

以前の投稿で、ポインターなしで配列を反転する方法を学びました。ここでは、ポインターを使用して配列を反転する方法を学習します。

以下は、ポインターを使用して配列を逆にする段階的な説明ロジックです。

<オール>
  • サイズと配列要素を入力し、size などの変数に格納します と arr .
  • 配列の最初の要素へのポインターを初期化します (例:* left = arr) .
  • 配列の最後の要素への別のポインターを初期化します (例:* right = (arr + size - 1)) .
  • 配列を逆にするために、配列の左側から 1 つと右側から 2 つのポインターを使用しています。中央の要素まで、連続する各要素を左から右に交換します。

    ビット単位の XOR 演算子を使用して、配列の 2 つの連続する要素を交換しました。 2 つの要素を入れ替えるには

    *left    ^= *right;
    *right   ^= *left;
    *left    ^= *right;
  • 左ポインタを 1 増やし、右ポインタを 1 減らします。
  • (left < right) までステップ 4 と 5 を繰り返します .
  • ポインタを使用して配列を反転するプログラム

    /**
     * C program to reverse an array using pointers
     */
    
    #include <stdio.h>
    
    #define MAX_SIZE 100
    
    /* Function declaration */
    void printArr(int *arr, int size);
    
    
    int main()
    {
        int arr[MAX_SIZE];
        int size;
        int *left = arr;  // Pointer to arr[0]
        int *right;
    
    
        // Input size of array
        printf("Enter size of array: ");
        scanf("%d", &size);
    
        right = &arr[size - 1];  // Pointer to arr[size - 1]
    
        /*
         * Input elements in array
         */
        printf("Enter elements in array: ");
        while(left <= right)
        {
            scanf("%d", left++);
        }
    
    
        printf("\nArray before reverse: ");
        printArr(arr, size);
    
    
        // Make sure that left points to arr[0]
        left = arr;
    
    
        // Loop to reverse array
        while(left < right) 
        {
            /*
             * Swap element from left of array to right of array.
             */
            *left    ^= *right;
            *right   ^= *left;
            *left    ^= *right;
    
            // Increment left array pointer and decrement right array pointer
            left++;
            right--;
        }
    
    
        printf("\nArray after reverse: ");
        printArr(arr, size);
    
    
        return 0;
    }
    
    
    
    /**
     * Function to print array using pointer.
     *
     * @arr     Pointer to array.
     * @size    Size of the array.
     */
    void printArr(int * arr, int size)
    {
        // Pointer to arr[size - 1]
        int * arrEnd = (arr + size - 1);
    
        /* Loop till last array element */
        while(arr <= arrEnd)
        {
            printf("%d, ", *arr);
    
            // Move pointer to next array element.
            arr++;
        }
    }

    出力

    Enter size of array: 10
    Enter elements in array: 10 20 30 40 50 60 70 80 90 100
    
    Array before reverse: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
    Array after reverse: 100, 90, 80, 70, 60, 50, 40, 30, 20, 10,

    おすすめの投稿

    • 配列と行列のプログラミング演習のインデックス
    • ポインタを使用して 2 つの数値を交換する C プログラム
    • ポインタを使用して配列を入力および表示する C プログラム
    • ポインターを使用してある配列を別の配列にコピーする C プログラム
    • ポインタを使用して 2 つの配列を交換する C プログラム