2013-03-11 218 views
-1

喜我試圖創建一個接受7元件陣列作爲一個參數,並通過該數組到一個較小的陣列的第五元素返回第三但是我目前收到這個錯誤傳遞數組到功能

的程序
assign8p7.c: In function 'main': 
assign8p7.c:18:2: warning: passing argument 1 of 'copysect' makes pointer from 
integer without a cast [enabled by default] 
assign8p7.c:3:6: note: expected 'int *' but argument is of type 'int' 

從我可以告訴警告有我傳遞一個數組中的參數沒有人知道如何我可能會解決這個問題嗎?也歡迎我的代碼的任何其他建議。

#include <stdio.h> 

int *copysect(int ar[],int start,int end) 
{ 
int i; 
static int retar[3]; 
for(i = 0; i<3;i++) 
{ 
    retar[i+start]=ar[i+start]; 
} 
return retar; 
} 

int main(int argc, char const *argv[]) 
{ 
int arry[7] = {1,2,3,4,5,6,7}; 
int miniarry[3]; 
miniarry[0] = *copysect(arry[0],3,5); 
return 0; 
} 
+0

編輯您的標題是更多的信息,請.. – Maroun 2013-03-11 14:08:33

+0

@MarounMaroun,你有能力做自己,你知道:) – StoryTeller 2013-03-11 14:09:45

+0

@StoryTeller是的,但我想他知道他應該做的它(未來的):) – Maroun 2013-03-11 14:13:14

回答

0
  1. 您正在使用數組中的第一個元素調用函數copysect,而不是指向數組的指針。正確的調用是:

    copysect(arry,3,5); 
    
  2. 你可以動態地計算數組的差別。現在copysect函數的調用者必須知道起點和終點之間的差值爲2

    int retar[end - start + 1] 
    
  3. 分配在for循環是錯誤的。您提領,而不是整個的值超出retar陣列

    retar[i]=ar[i+start]; 
    
  4. 當調用copysect功能,你只分配在miniarry的第一個元素的範圍由取消引用數組函數返回時,陣列。

  5. 這是不是最好的主意,在函數中的靜態數組(這將是有問題的,如果你調用的函數不止一次,等等)。相反,你可以聲明更小的數組,並將其作爲參數傳遞給函數。

    void copysect(int ar[], int retar[], int start,int end,) 
    
+0

謝謝你的信息,我一定會用它,如果我可以問你一個更快的問題,我做了你在回答中建議的更改,我是分配給輸入時獲得關於我的代碼第17行,指出miniarry是不兼容的類型的錯誤「INT [3]」從int現在我假定這是因爲我的函數返回int,而不是陣列然而,當我除去int聲明我的程序崩潰任何想法,爲什麼這可能是? – undone98 2013-03-11 14:53:55

5
int *copysect(int ar[],int start,int end) 

好,copysect作爲其第一個參數整數數組。

miniarry[0] = *copysect(arry[0],3,5); 

糟糕,您傳遞給它一個整數而不是數組。

+1

在其他古怪。 – user7116 2013-03-11 14:10:02

+3

哎呀!如果只有某件事可以告訴他。 – iamnotmaynard 2013-03-11 14:11:40

+1

@iamnotmaynard可悲的是,所有的編譯器說的是'assign8p7.c:3:6:注:應爲「INT *」,但參數的類型爲「int''這是沒有幫助。 – 2013-03-11 14:12:50