【问题标题】:using array as function parameter使用数组作为函数参数
【发布时间】:2012-08-06 08:41:48
【问题描述】:

我是 c 的初学者。我不太了解如何将数组用作函数参数、参数或如何从函数返回数组。据我所知,下面的代码应该可以正常工作。但我不知道问题出在哪里。该功能无法正常工作。

//reversing an array using function
#include<stdio.h>
void rev(int array[],int length)
{
    int k,j,temp;
    for(k=length-1,j=0;k>=0&&j<length;k--,j++){
        temp=array[k];
        array[k]=array[j];
        array[j]=temp;
    }
}
int main()
{
    int c,arr[]={1,2,3,4,5,6,7,8,9};
    rev(arr,9);
    for(c=0;c<9;c++){
        printf("%d ",arr[c]);
    }
    return 0;
}

【问题讨论】:

  • 事实上你不能直接传递一个数组作为函数参数,或者返回一个作为函数结果。参数声明int array[] 真正的意思是int *array,一个指针(这only 应用于参数声明)。建议阅读:comp.lang.c FAQ 的第 6 节。

标签: c arrays function parameters


【解决方案1】:

你只需要走到数组的中间,如果多走,你就重新反转数组:

所以这个:

for(k=length-1,j=0;k>=0&&j<length;k--,j++){

应该是:

for(k=length-1,j=0;k > j;k--,j++){

【讨论】:

  • 非常感谢。我只是在论坛上发布后才想到自己。非常感谢。
【解决方案2】:

在我看来你正在执行相反的操作两次

也就是说,您立即交换开始和结束元素,并在迭代结束时再次交换它们。即你最终得到相同的数组。

您可以:

  1. 仅在阵列中途执行交换,或
  2. 从第一个数组反向填充第二个数组(但是,我不知道您是否要重新填充原始数组 - 您可能需要将其复制回来)

【讨论】:

    【解决方案3】:

    数组没有问题。你的算法有问题。 //使用函数反转数组

    #include<stdio.h>
    void rev(int array[],int length)
    {
        int k,j,temp;
        for(k=length-1,j=0;k>=0 && j<length / 2; k--,j++){
            temp=array[k];
            array[k]=array[j];
            array[j]=temp;
        }
    }
    

    这个反向数组。您的算法将其反转两次。因此,只需在 for 条件中添加 /2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多