2015-11-03 75 views
-2

我想傳遞一個整個數組到我的功能,但我正在逐漸目前正在錯誤:傳遞整個數組作爲參數成函數

test.c: In function 'main': 
test.c:4:18: error: expected expression before ']' token 
method(myArray[]); 
      ^
test.c: At top level: 
test.c:8:6: warning: conflicting types for 'method' [enabled by default] 
void method(int arr[]){ 
    ^
test.c:4:3: note: previous implicit declaration of 'method' was here 
method(myArray[]); 
^ 
test.c: In function 'method': 
test.c:9:3: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default] 
printf("DATA: %d",arr[2]); 
^ 

這是我的代碼(的簡化版本我想要做的是拋出了同樣的錯誤:。

int main(){ 
    int myArray[3]; 
    myArray[2]=12; 
    method(myArray[]); 
} 

void method(int arr[]){ 
    printf("DATA: %d",arr[2]); 
} 
+0

預先聲明可能有助於 –

+0

這是正確的方式,'方法(myarray的);'刪除 –

+0

您是在一些感覺思維括號錯了,當你把它描述爲「通過整個陣列」因爲只有一個指針,而不是整個數組實際上傳遞。 –

回答

6

當將數組傳遞給一個函數,你不需要它後[]只是用數組名就足夠了

另外,您需要在使用函數之前定義或聲明函數,並且您需要#include <stdio.h>以便編譯器知道printf的定義。

#include <stdio.h> 

void method(int arr[]); 

int main(){ 
    int myArray[3]; 
    myArray[2]=12; 
    method(myArray); 
} 

void method(int arr[]){ 
    printf("DATA: %d",arr[2]); 
} 
+0

好吧,我會試試謝謝你 – user3379139

3

超過這裏要提到一點,

  • 首先,包括其中包含你要使用的庫函數的函數簽名所需的頭文件。其次,在使用前要麼聲明函數原型,要麼定義函數。請注意,隱含聲明規則的古代已從C標準正式廢除。

  • 第三,改變

    method(myArray[]); 
    

    method(myArray); 
    

    爲數組名本身給你的陣列,它基本上是你需要通過什麼樣的基址。