栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

#include 

void function(int arr[10])
{
  printf("In function: sizeof(arr) = %ldn", sizeof(arr));
}


int main()
{
  int arr[10];

  printf("In main, sizeof(arr) = %ldn", sizeof(arr));
  function(arr);

  return 0;
}

如上代码经过编译运行后的结果为:

In main, sizeof(arr) = 40
In function: sizeof(arr) = 8

注:因为笔者使用的是x64系统,故指针型数据长度为8字节。

因此可以得出结论:在数组名作为实参传入函数时,函数内部将该数组名作为指针处理。

论证过程:为了验证上述结论的正确性,我们可以利用C语言不支持函数重载的特性,新增一个函数:

#include 

void function(int arr[10])
{
  printf("In function: sizeof(arr) = %ldn", sizeof(arr));
}


void function(int *arr)
{

}

int main()
{
  int arr[10];

  printf("In main, sizeof(arr) = %ldn", 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) = %ldn", sizeof(arr));
      |                                                   ^

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号