繁体   English   中英

在 C 语言中更新后如何恢复到原始数组? 像使用临时指针或任何其他方式来恢复?

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

//我想在第二个 printf 语句之后将数组恢复到原始状态,或者以任何其他方式编写代码,以便下一个代码 a=++(*p) 在原始数组上运行,而不是在更新数组上运行。

代码:

#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);  

}

给出的输出:


 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]
└──╼ $

预期输出:


 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]
└──╼ $

停止编写 C 代码并学习现代 C++。

您可以使用具有值语义的std::array 这使您可以简单地复制数组并稍后将其复制回来,如果这是您想要的:

#include <cstdio>
#include <cstdlib>
#include <array>

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

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

    std::array arr2 = arr;
    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.
    arr = arr2;

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

}

修改副本会更好。

感谢您的逻辑:@sam-varshavchik

将原始数组值复制到其他地方,然后在您完成对数组的摆弄后将它们复制回来。

#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);

    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM