传递给函数时数组的大小

时间:2014-09-02 16:32:33

标签: c arrays

有人能解释一下以下程序的输出吗?

   #define SIZE 10
  void size(int arr[SIZE],int i[SIZE])
  {
         printf("size of array is:%d %d\n",sizeof(arr),sizeof(i));
  }

  int main()
    {
        int arr[SIZE],i[SIZE];
       printf("%d %d\n",sizeof(arr),sizeof(i));
        size(arr,i);
        return 0;
     }                                                                                

      OUTPUT
      40 40 
     8 8

为什么8 8? 请帮忙

3 个答案:

答案 0 :(得分:2)

因为参数int arr[SIZE]int i[SIZE]不是main函数中的数组。它们是指针。并且指针在64位计算机上的大小通常为8。

答案 1 :(得分:2)

  1. main()中,您获得了数组的大小。

  2. 当我们致电size(arr, i);时,我们会发送arri的基地址。当我们将变量的地址传递给函数时,它会将地址存储在指针中。所以你在size()函数中得到了指针的大小。

答案 2 :(得分:-2)

数组本身替换为指针(但它们不是指针)。所以,代码

a[i]

相当于

*(a + i)

当数组不是动态的时,sizeof运算符可以确定它的大小(在它的范围内),但是当它传递给function时它是一个指针。所以

sizeof(any_pointer) == sizeof(size_t)

由于结果,似乎你在64位处理器上工作