天真的小白 发表于 2023-5-22 20:57:19

实现数组排序反转,但是只输出了前半部分,还有要用指针知识。


#include <stdio.h>
int main()
{
      int i,j;
      int a={11,22,33,44,56,67,78,98,93,100};
      int *p=a;
      
      for(i=0,j=9;i<10;i++,j--)
      {
               
                *(p+j)=*(a+i);
      }
      for(i=0;i<10;i++)
      {      
                printf("%d\n",*(p+i));      
      }
      for(i=0;i<10;i++)      
      {      
                printf("%d",*(p+i));      
      }
      return 0;
}
{:5_107:} 又得麻烦大佬了

isdkz 发表于 2023-5-22 21:00:56

这段代码试图把数组的元素反转,但是并没有正确地做到这一点。问题在于你的两个循环(i和j)同时在数组两端开始,并向中间移动。这会导致你反转的前半部分被后半部分覆盖。所以,你看到的输出只是原始数组的前半部分。

解决方法是仅使用一个索引,从头开始,并只反转到数组的中间。这样,你可以将数组的每个元素与其对应的反向元素交换,而不会覆盖已经反转的元素。以下是修改后的代码:

#include <stdio.h>

int main() {
    int i;
    int a = {11, 22, 33, 44, 56, 67, 78, 98, 93, 100};
    int temp;
    int *p = a;

    for(i = 0; i < 5; i++) {
      temp = *(p+i);
      *(p+i) = *(p+9-i);
      *(p+9-i) = temp;
    }

    for(i = 0; i < 10; i++) {
      printf("%d\n", *(p+i));
    }

    for(i = 0; i < 10; i++) {
      printf("%d ", *(p+i));
    }
    return 0;
}

在这个程序中,我创建了一个临时变量 temp 来帮助在数组中交换元素。这个循环仅运行到数组的中点(在这种情况下是索引5,因为数组有10个元素),这样我们就可以交换对应的元素,从而反转整个数组。

这个程序将输出正确反转的数组。

天真的小白 发表于 2023-5-22 21:07:26

isdkz 发表于 2023-5-22 21:00
这段代码试图把数组的元素反转,但是并没有正确地做到这一点。问题在于你的两个循环(i和j)同时在数组两端 ...

真的谢谢大佬给你跪下了{:5_95:}

isdkz 发表于 2023-5-22 21:10:03

天真的小白 发表于 2023-5-22 21:07
真的谢谢大佬给你跪下了

不客气,如果对你有帮助的话给个最佳支持一下呗{:5_92:}
页: [1]
查看完整版本: 实现数组排序反转,但是只输出了前半部分,还有要用指针知识。