在C中调用具有数组和值的函数?

Bel*_*thy 1 c arrays function

下面的代码更改了函数检查中arr的值,并打印出"2"的值,即使我没有在指针中的check函数中传递数组.怎么可能?

 #include <stdio.h>
 #include <stdlib.h>
 void check(int n,int array[]);

 int main()
 {
     int arr[]={1,2,3,4};
     int i;
     check(4,arr);

     for(i=0;i<4;i++){
         printf("%d\n",arr[i]);
     }
     return 0;
 }

 void check(int n,int array[])
 {
     int j=0;

     while(j<n){
         array[j]=2;
         j++;
     }
 }
Run Code Online (Sandbox Code Playgroud)

Spi*_*rix 9

请记住

void check(int n,int array[]);
Run Code Online (Sandbox Code Playgroud)

是相同的

void check(int n,int *array);
Run Code Online (Sandbox Code Playgroud)

所以,当你使用

check(4,arr);
Run Code Online (Sandbox Code Playgroud)

你其实在做

check(4,&arr[0]); /* This is called array "decay" */
Run Code Online (Sandbox Code Playgroud)

并且因为数组衰减到指向其第一个元素的地址的指针.因此,这意味着"数组"通过引用传递.