【问题标题】:arrays as arguments to functions [duplicate]数组作为函数的参数[重复]
【发布时间】:2021-06-10 06:15:26
【问题描述】:
#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=size of array/ size of arr[0] ?还有为什么 n 的值不同?在 main 和 inside 函数里面?

【问题讨论】:

  • mainarr里面是一个数组;函数arr 内部是一个指针。您可能会喜欢comp.lang.c faq 的第 6 部分。

标签: arrays c function


【解决方案1】:
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

希望你理解这个概念。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 2016-02-23
    • 2014-12-23
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2023-03-03
    • 2016-10-09
    相关资源
    最近更新 更多