将整个Array作为参数传递给函数

时间:2015-11-03 20:33:31

标签: c arrays function

我正在尝试将整个数组传递给我的函数,但我现在收到错误:

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]);
}

2 个答案:

答案 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]);
}

答案 1 :(得分:3)

这里要提到的不止一点,

  • 首先,包含必需的头文件,其中包含您将要使用的库函数的函数签名。

  • 其次,要么转发声明函数原型,要么在使用前定义函数。请注意,古代隐式声明规则已从C标准中正式删除。

  • 第三,改变

    method(myArray[]);
    

    method(myArray);
    

    因为数组名称本身为您提供了数组的基址,这基本上是您需要传递的。