2012-08-06 109 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在條件。