C/C++数组名作为参数时的注意事项

#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));
      |                                                   ^

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值