2012-08-06 111 views
1

我是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; 
} 
+1

事实上,你*不能直接传递一个数组作为函数参数,或者返回一个作为函数结果。参数声明'int array []'实际上意味着'int * array',一个指针(这只适用于*参数声明)。建议阅读:[comp.lang.c常见问题](http://www.c-faq.com/)的第6部分。 – 2012-08-06 09:39:00

回答

3

你只需去,直到阵列的中间,如果你去多了,你重新扭转数组:

所以这样的:

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

应该是:

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

非常感谢。我刚刚在论坛上发表了自己的想法。非常感谢。 – 2012-08-06 08:48:14

0

它看起来对我像你在进行反两次

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

您可以:

  1. 通过您的阵列只完成一半的交换,或
  2. 从第一填充反向第二阵列(我不知道,如果你想重新填充原始数组,但是 - 您可能需要将其复制回来)
0

阵列没有问题。问题与你的算法。 //倒车使用功能

#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; 
    } 
} 

这种反向阵列的阵列。你的算法反转两次。所以只需添加/ 2在条件。