首页 > 解决方案 > 当我们将数组作为参数传递时,实际上会发生什么?

问题描述

void fun(int arr[8])
{
   printf("\nArray size inside fun() is %d", sizeof(arr));
}

int main()
{
   int arr[8] = {1, 2, 3, 4, 5, 6, 7, 8};

   printf("Array size inside main() is %d", sizeof(arr));
   fun(arr);

   return 0;
}

为什么arr[8]函数内部数组的大小fun()是 4 字节,而arr[8]函数 main() 中的数组是 32 字节?尽管它们可以存储 8 个整数,每个 4 个字节。arr[8]func()中数组的大小也应该是 32。

当我们将数组作为参数传递时,实际上会发生什么?

标签: carrays

解决方案


mainsizeof正在计算arr8 * sizeof(int)。中funsizeof正在计算arrsizeof(int *)。如您所见,数组在传递给函数时衰减为指针。


推荐阅读