想喝羊肉鲜汤 2022-04-06 21:12 采纳率: 100%
浏览 82
已结题

数组通过指针变化之后,如何使其回到初始化时的状态?

问题遇到的现象和发生背景
     刚刚触碰到指针这一块,想把之前的一些内容融合到一起去检查自己的成果,结果发现自己道行尚浅
     具体内容:
   首先使用指针对数组进行初始化,初始化完成之后进行数组的排序以及倒序排列,初始化和排序都没什么问题,但是进行到倒序时发现,程序对排序之后的数组进行了倒序,发现情况之后才恍然大悟,指针直接改变了原始数组。
运行结果及报错内容
#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;
}

img

我的解答思路和尝试过的方法

我所能想到的一种办法:
定义一个arr2,在初始化完成之后令arr2=arr
后续用到初始数组时针对arr2进行操作。

我想要达到的结果

有没有一种方式可以在不定义arr2的情况下使数组回到最初定义的状态?希望各位可以帮忙和解答!感谢!

  • 写回答

2条回答 默认 最新

  • 关注

    让p=arr;就可以从新回到arr数组的开始了啊
    函数中传入的p会随着操作改变,但是arr这个数组的首地址不会改变的,所以在你需要重置回数组首地址的地方,让p=arr就可以了。

    如果你需要保留数组arr中原始数据的顺序,就只能用一个新的数组arr2保存原来的数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 压测时,并发量过高时,响应时间出现尖刺
  • ¥15 关于vmprotect3.8.4虚拟文件一项
  • ¥15 在不用IT调试的情况下怎样能连外网
  • ¥20 C#调用虚拟键盘TabTip.exe
  • ¥15 Qt4代码实现下面的界面
  • ¥15 CCS离散化传递函数与仿真不一致
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的