问题遇到的现象和发生背景
刚刚触碰到指针这一块,想把之前的一些内容融合到一起去检查自己的成果,结果发现自己道行尚浅
具体内容:
首先使用指针对数组进行初始化,初始化完成之后进行数组的排序以及倒序排列,初始化和排序都没什么问题,但是进行到倒序时发现,程序对排序之后的数组进行了倒序,发现情况之后才恍然大悟,指针直接改变了原始数组。
运行结果及报错内容
#include<stdio.h>
void initArr(int *p,int leng)
{
int i;
printf("您一共要输入%d个数字\n",leng);
for(i=0;i<leng;i++)
{
printf("请输入第%d个数字:\n",i+1);
scanf("%d",&p[i]);
}
}
void printArr(int *p,int leng)
{
int i;
for(i=0;i<leng;i++)
{
printf("%d\t",p[i]);
}
printf("\n");
}
void maxToMinArr(int *p,int leng)
{
int i;
int j;
int m;
for(i=0;i<leng;i++)
{
for(j=0;j<leng-1-i;j++)
{
if(p[j]<p[j+1])
{
m=p[j];
p[j]=p[j+1];
p[j+1]=m;
}
}
}
}
void revengeArr(int *p,int leng)
{
int i,j;
int m;
for(i=0;i<leng/2;i++)
{
j=leng-1-i;
m=p[i];
p[i]=p[j];
p[j]=m;
}
}
int main()
{
int x;
printf("请输入您要对比数字的个数:\n");
scanf("%d",&x);
int arr[x];
int *p;
p=arr;
int leng;
leng=sizeof(arr)/sizeof(arr[0]);
initArr(p,leng);
printf("数组初始化完成!\n");
printArr(p,leng);
maxToMinArr(p,leng);
printf("数组从大到小排列:\n");
printArr(p,leng);
printf("倒序排列为:\n");
revengeArr(p,leng);
printArr(p,leng);
return 0;
}
我的解答思路和尝试过的方法
我所能想到的一种办法:
定义一个arr2,在初始化完成之后令arr2=arr
后续用到初始数组时针对arr2进行操作。
我想要达到的结果
有没有一种方式可以在不定义arr2的情况下使数组回到最初定义的状态?希望各位可以帮忙和解答!感谢!