数组作为函数的参数

时间:2021-06-10 06:15:26

标签: arrays c function

#include <stdio.h>
 

void fun(int arr[]) 
   unsigned int n = sizeof(arr)/sizeof(arr[0]);
   printf("\nArray size inside fun() is %d", n);
}
int main()
{
   int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
   unsigned int n = sizeof(arr)/sizeof(arr[0]);
   printf("Array size inside main() is %d", n);
   fun(arr);
   return 0;
}

为什么人们要写 n=数组大小/ arr[0] 大小?以及为什么 n 的值不同?内部主函数和内部函数?

1 个答案:

答案 0 :(得分:2)

int n = sizeof(arr)/sizeof(arr[0]);

此行用于计算数组中的项数。 sizeof(arr) 给出数组消耗的总大小,sizeof(arr[0]) 给出分配给每个元素的大小。例如,如果它是 int 那么 GCC 编译器分配它 4 个字节。

在 C 中,当您将数组作为参数传递给函数时,C 不会传递整个数组的副本,而是将 指针 传递到数组的第一个元素。所以,

fun(arr); // it passes the base address of the array, &arr[0]

所以我们无法确定被调用函数内部数组的长度。如果您在函数 fun 中运行 sizeof(arr) ,那么它会给出指针的大小。 (通常为 4 或 8,具体取决于您的平台)。

因此,将数组传递给函数的正确方法是还将数组的大小作为第二个参数传递:

fun(arr, n); //arr is array and n is the length of the array

希望你理解这个概念。