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

问题描述

我很长时间以来都是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;
}

输出如下:

size of 'a' befor the function is: 20
size of 'a' in the function is: 8

至少我想编写一个打印和排列我不知道长度的函数。我对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]);
    }

输出(缺少元素3和4):

Array[0] = 0
Array[1] = 2
Array[2] = 4

非常感谢您的解释!

解决方法

在C语言中,您不仅必须传递衰减为指针的数组,还必须传递数组的大小。在C语言中,通用约定是(array,size):

void print_array(int a[],size_t s) {
  for (size_t i = 0; i < s; ++i) {
    ... a[i] ...
  }
}

在哪里这样称呼:

print_array(a,5);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...