Search code examples
arrayscdata-structuresrecursive-datastructures

How to revert back to original array after updating it in C lang? like using a temp pointer or any other way to revert?


//I want to revert array back to original state after 2nd printf statement OR code any other way such that next code a=++(*p) operates on origianl array not on Update array.

CODE:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int arr[]={10,20,30,40,50};   
    int *p = arr;    
    int a;

    printf("\n arr[0] = %d, arr[1] = %d, a = %d, *p = %d", arr[0], arr[1],a , *p);

    a= ++*p;
    printf("\n arr[0] = %d, arr[1] = %d, a = %d, *p = %d", arr[0], arr[1],a , *p);
    
    //I WANT TO RESET ARRAY BACK TO ORIGINAL STATE after this printf statement or any other way such that next code a= ++(*p) operates on origianl array not on Update array.
    
    a= ++(*p);
    printf("\n arr[0] = %d, arr[1] = %d, a = %d, *p = %d", arr[0], arr[1],a , *p);  

}

OUTPUT GIVEN:


 arr[0] = 10, arr[1] = 20, a = 32767, *p = 10
 arr[0] = 11, arr[1] = 20, a = 11, *p = 11
 arr[0] = 12, arr[1] = 20, a = 12, *p = 12┌─[user@user]─[~/Documents/vs_code/DS/TEMP]
└──╼ $

OUTPUT EXPECTED:


 arr[0] = 10, arr[1] = 20, a = 32767, *p = 10
 arr[0] = 11, arr[1] = 20, a = 11, *p = 11
 arr[0] = 11, arr[1] = 20, a = 11, *p = 11┌─[user@user]─[~/Documents/vs_code/DS/TEMP]
└──╼ $

Solution

  • Thanks for logic: @sam-varshavchik

    Copy the original array values somewhere else, then copy them back when you're done fiddling with the array.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        int arr[]={10,20,30,40,50};   
        int *p = arr;    
        int a;
    
        int length= sizeof(arr)/sizeof(arr[0]);
    
        int arr2[length];
    
        for(int i=0; i<length;i++){
            arr2[i]= arr[i];
        }
    
    
        printf("\n arr[0] = %d, arr[1] = %d, a = %d, *p = %d", arr[0], arr[1],a , *p);
    
        a= ++*p;
        printf("\n arr[0] = %d, arr[1] = %d, a = %d, *p = %d", arr[0], arr[1],a , *p);   
        
        p= &arr2;
        a= ++(*p);
        printf("\n arr[0] = %d, arr[1] = %d, a = %d, *p = %d", arr[0], arr[1],a , *p);
    
        
    }