#include <stdio.h>
void function(int arr[10])
{
printf("In function: sizeof(arr) = %ld\n", sizeof(arr));
}
int main()
{
int arr[10];
printf("In main, sizeof(arr) = %ld\n", sizeof(arr));
function(arr);
return 0;
}
如上代码经过编译运行后的结果为:
In main, sizeof(arr) = 40
In function: sizeof(arr) = 8
注:因为笔者使用的是x64系统,故指针型数据长度为8字节。
因此可以得出结论:在数组名作为实参传入函数时,函数内部将该数组名作为指针处理。
论证过程:为了验证上述结论的正确性,我们可以利用C语言不支持函数重载的特性,新增一个函数:
#include <stdio.h>
void function(int arr[10])
{
printf("In function: sizeof(arr) = %ld\n", sizeof(arr));
}
/* newly added */
void function(int *arr)
{
}
int main()
{
int arr[10];
printf("In main, sizeof(arr) = %ld\n", sizeof(arr));
function(arr);
return 0;
}
再次编译,则提示如下错误:
arr_parameter.c:8:6: error: redefinition of ‘function’
8 | void function(int *arr)
| ^~~~~~~~
arr_parameter.c:3:6: note: previous definition of ‘function’ was here
3 | void function(int arr[10])
| ^~~~~~~~
故结论正确。
附:
GCC 9.3.0(Windows Subsystem Linux - Ubuntu)编译以上程序时会提示warning:
arr_parameter.c:5:51: warning: ‘sizeof’ on array function parameter ‘arr’ will return size of ‘int *’ [-Wsizeof-array-argument]
5 | printf("In function: sizeof(arr) = %ld\n", sizeof(arr));
| ^