【问题标题】:C - passing array in function an get its size [duplicate]C-在函数中传递数组并获取其大小
【发布时间】:2021-02-13 09:04:13
【问题描述】:

我是 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

非常感谢您的任何解释!

【问题讨论】:

    标签: arrays c parameter-passing sizeof


    【解决方案1】:

    在 C 中,您不仅必须传入衰减为指针的数组,还必须传入数组的大小。在 C 中,常见的约定是(数组,大小):

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

    你怎么称呼它:

    print_array(a, 5);
    

    【讨论】:

      猜你喜欢
      • 2011-10-19
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2019-10-04
      相关资源
      最近更新 更多