Arrays C-在函数中传递数组以获取其大小

Arrays C-在函数中传递数组以获取其大小,arrays,c,parameter-passing,sizeof,Arrays,C,Parameter Passing,Sizeof,我使用Python已经有相当一段时间了,现在我试图进入C语言。虽然Python在后台为我做了很多事情,但我现在必须以一种更“基本”的方式用C语言编写代码。我喜欢它,。。。但这很难 重要部分从这里开始 我非常喜欢Python中的len()方法来获取数组的长度。但在C语言中,我似乎必须查找数组的大小(以字节为单位),然后将其除以一个元素的大小(以字节为单位),才能得到孔数组的长度。 如果有一个简单或更常见的方法,我想在这里谈谈。但是,我想了解为什么下面的程序会为我的数组“a”打印不同的大小 #inc

我使用Python已经有相当一段时间了,现在我试图进入C语言。虽然Python在后台为我做了很多事情,但我现在必须以一种更“基本”的方式用C语言编写代码。我喜欢它,。。。但这很难

重要部分从这里开始

我非常喜欢Python中的len()方法来获取数组的长度。但在C语言中,我似乎必须查找数组的大小(以字节为单位),然后将其除以一个元素的大小(以字节为单位),才能得到孔数组的长度。 如果有一个简单或更常见的方法,我想在这里谈谈。但是,我想了解为什么下面的程序会为我的数组“a”打印不同的大小

#include <stdio.h>

void print_array(int a[]){
   printf("size of 'a' in the function is: %d\n", sizeof(a));
}

int main(void){
   int a[5] = {0, 2, 4, 8, 16};
   printf("size of 'a' before the function is: %d\n", sizeof(a));
   print_array(a);
   return 0;
}
至少我想写一个打印和数组的函数,我不知道数组的长度。我的理解是,在C语言中,只有循环真理才能实现。这是我将添加到“print_array”函数中的代码。但它不知道我是怎么做的,因为“错误”的大小

int loop = sizeof(a)/sizeof(a[0]);
for(int i = 0; i <= loop; i++){
        printf("Array[%d] = %d\n", i, a[i]);
    }

谢谢你的解释

在C中,不仅要传入数组(它会衰减为指针),还要传入数组的大小。在C语言中,常见的约定是(数组、大小):

int loop = sizeof(a)/sizeof(a[0]);
for(int i = 0; i <= loop; i++){
        printf("Array[%d] = %d\n", i, a[i]);
    }
Array[0] = 0
Array[1] = 2
Array[2] = 4
void print_array(int a[], size_t s) {
  for (size_t i = 0; i < s; ++i) {
    ... a[i] ...
  }
}
print_array(a, 5);