[英]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.