m0_62667564 2022-03-22 18:10 采纳率: 84.8%
浏览 28
已结题

C语言有关指针变量的使用

采用函数方法将a数组中5个整数按相反顺序存放
#include<stdio.h>
void inv(int*x,int n);
int main()
{
int i,arr[5],*p=arr;
printf("The original arry:\n");
for(i=0;i<5;i++,p++)
scanf("%d",p);
printf("Output:\n");

//p=arr;

inv(p,5);
printf("The array has been inverted:\n");
for(p=arr;p<arr+5;p++)
    printf("%d ",*p);
printf("\n");
return 0;

}
void inv(intx,int n)
{
int i,tmp;
for(i=0;i<n/2;i++)
{
tmp=
(x+i);
(x+i)=(x+n-i-1);
*(x+n-i-1)=tmp;
}
}
其中注释的p=arr是什么意思?没有为什么不行呢?这句与for循环中的p=arr有什么区别?麻烦将除了函数交换部分的整个程序讲解一下,尤其是通过指针变量传递数值的部分,谢谢

  • 写回答

2条回答 默认 最新

  • 关注

    p=arr是让p指向arr数组的首地址
    因为for(i=0;i<5;i++,p++)这里p++导致p的地址改变了,所以在for(p=arr;p<arr+5;p++)中,需要让p重新指向arr的首地址
    代码注释如下:

    #include<stdio.h>
    void inv(int* x, int n);
    int main()
    {
        int i, arr[5], * p = arr;    //这里让p指向arr数组的首地址
        printf("The original arry:\n");
        for (i = 0; i < 5; i++, p++) //这里通过p向arr数组中读入数据,p最后指向arr数组的最后一个元素的下一个地址(最后一个元素是arr[4],p指向了arr[4]后面的一个地址)
            scanf("%d", p);
        printf("Output:\n");
    
        //p=arr;  //因为在上面的for循环中,p已经移动到了arr数组的末尾,所以,这里需要让p重新指向arr数组的首地址,否则在inv中就会越界,所以这一句不能少
    
        inv(p, 5);
        printf("The array has been inverted:\n");
        for (p = arr; p < arr + 5; p++) //这里重新让p指向arr数组的首地址,并通过p输出arr数组的5个元素
            printf("%d ", *p);
        printf("\n");
        return 0;
    }
    void inv(int* x, int n)
    {
        int i, tmp;
        for (i = 0; i < n / 2; i++)
        {
            tmp = *(x + i);
            *(x + i) = *(x + n - i - 1);
            *(x + n - i - 1) = tmp;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器