【问题标题】:Arrays and pointer in C programming questionC编程问题中的数组和指针
【发布时间】:2021-02-17 18:26:51
【问题描述】:

我最近才开始做 C,一直被这个问题困扰。

偶数数组中有一些整数。编写一个 C 程序重新排列数组,使左半部分按升序排列,右半部分按降序排列。打印左半边和右半边对应元素从最小值到最大值的距离(正差)。

注意:数组必须通过指针表示。必须为必要的重新排列定义一个函数 sort()。

示例输入: 输入元素数量:6

输入元素:2 7 4 9 10 3

输出: 2 4 7 10 9 3

1 5 3

for (j=0;j<((num/2)-1);j++)
{
    for (i=0;i<((num/2)-1);i++)
    {
        if (arr[i]>arr[i+1])
        {
            temp=arr[i]; /* swapping elements (arranging left half in ascending order) */
            arr[i]=arr[i+1];
            arr[i+1]=temp;
        }
    }
}
for (j=1;j<(num/2);j++)
{
    for (i=(num/2);i<num;i++)
    {
        if (arr[i]<arr[i+1])
        {
            temp=arr[i];   /* arranging right half in descending order */
            arr[i]=arr[i+1];
            arr[i+1]=temp;
        }
    }
}
for (i=0;i<num;i++)
{
    printf("%d ",arr[i]);
}
printf("\n");
for (i=0;i<(num/2);i++)
{
   if (arr[i]>arr[((num-1)-i)])
   {
       diff=arr[i]-arr[(num-1)-i];
   }
   else
   {
       diff=arr[(num-1)-i]-arr[i];
   }
   printf("%d ",diff);
}

}

这是我想出的代码,它可以工作,但是我需要用一个指针表示的数组来编写它,并且我需要将它包含在一个函数中。

请帮帮我

【问题讨论】:

  • 不清楚“表示为指针”是什么意思。如果他们的意思是使用指针表示法而不是数组下标表示法,请将 a[i] 的所有实例替换为 *(a + (i))
  • 数组和指针有着密切的关系。如果您的代码在 arr 被声明为数组时有效,那么如果 arr 是指向数组第一个元素的指针,则它的工作方式完全相同。
  • 但是数组不能用指针“表示”。您可以将指针 指向 数组元素或整个数组,但此类指针不能很好地表征为“表示”指向的数据。
  • @Mathew Thomas 这个输出 1 5 3 是什么意思?
  • 好的,所以输出基本上是排序数组的最左边元素和最右边元素之间的正差。因此,如果我的输入是 6 3 4 1 2 9,则排序后的数组将为 3 4 6 9 2 1,最终输出为 (3-1) (4-2) (9-6)

标签: arrays c sorting pointers


【解决方案1】:

...我需要用指针表示的数组来编写它,并且需要将它包含在一个函数中。

这是可能的。您需要对代码进行一些更改:

  1. arr[] 的声明替换为:

    int *arr;
    
  2. 然后,分配所需的内存字节:

    您已经要求用户提供一个偶数,比如说size。现在,我们可以这样分配内存:

    arr = (void *)malloc(sizeof(int) * size);
    
  3. 无论您将指针传递给整数还是整数数组,它都会在函数定义中自动转换为指针 - 无法像数组一样查找指针的大小。因此,排序函数的原型应该是这样的:

    void sort(int *arr, const int size)
    

就是这样。现在,您可以像处理数组一样操作指针。例如,您可以通过两种方式访问​​存储在指针中的值。第一个很简单,使用arr[0]arr[i]等即可。另一方面,可以引入解引用运算符来获取指针中存储的值:

int value_at_1st_index = *(arr + 1);
.
.
int value_at_Nth_index = *(arr + N);

注意arr[i] 等同于*(arr + i)

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多