下面的代码更改了函数检查中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)
请记住
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)
并且因为数组衰减到指向其第一个元素的地址的指针.因此,这意味着"数组"通过引用传递.