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

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

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

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan