Programma C per invertire un array usando i puntatori

Programma C per invertire un array usando i puntatori

Scrivete un programma C per inserire gli elementi in una matrice e invertire la matrice usando i puntatori. Come invertire un array usando i puntatori nella programmazione C. Logica per invertire un array usando i puntatori in C.

Esempio

Inserimento

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

Uscita

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

Conoscenze richieste

Programmazione C di base, Array, Pointer, Pointer Aritmetica, Pointer e Array

Logica per invertire l'array usando i puntatori

Nei post precedenti abbiamo imparato a invertire un array senza puntatore. Qui impareremo a invertire l'array usando i puntatori.

Di seguito è riportata la logica descrittiva passo passo per invertire l'array utilizzando i puntatori.

  1. Inserisci la dimensione e gli elementi dell'array, salvalo in una variabile, ad esempio size e arr .
  2. Inizializza un puntatore al primo elemento dell'array, ad esempio * left = arr .
  3. Inizializza un altro puntatore all'ultimo elemento dell'array, ad esempio * right = (arr + size - 1) .
  4. Per invertire l'array sto usando due puntatori uno dal lato sinistro dell'array e l'altro dal lato destro. Scambiamo ogni elemento successivo da sinistra a destra fino all'elemento centrale.

    Ho usato l'operatore XOR bit per bit per scambiare due elementi successivi dell'array. Per scambiare due elementi esegui

    *left    ^= *right;
    *right   ^= *left;
    *left    ^= *right;
  5. Incrementa il puntatore sinistro e decrementa il puntatore destro di 1.
  6. Ripeti i passaggi 4 e 5 fino a (left < right) .

Programma per invertire un array usando i puntatori

/**
 * 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++;
    }
}

Uscita

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,

Post consigliati

  • Indice esercizi di programmazione di array e matrici.
  • Programma C per scambiare due numeri usando i puntatori.
  • Programma C per inserire e visualizzare array usando i puntatori.
  • Programma C per copiare un array in un altro array usando i puntatori.
  • Programma C per scambiare due array usando i puntatori.