首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C-传递数组的函数,并得到它的大小

C-传递数组的函数,并得到它的大小
EN

Stack Overflow用户
提问于 2020-10-30 21:49:45
回答 1查看 164关注 0票数 0

我现在是Python用户很长一段时间了,现在尝试进入C。虽然Python为我做了很多背景工作,但我现在不得不用C语言编写更“基本”的代码。我喜欢,..。但这很难。

重要的部分从这里开始,

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

代码语言:javascript
复制
#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;
}

输出如下:

代码语言:javascript
复制
size of 'a' befor the function is: 20
size of 'a' in the function is: 8

至少我想要写一个打印和数组的函数,我不知道它的长度。我所理解的,在C中只有通过循环真理才有可能。这是我要添加到'print_array‘函数的代码。但这并不是我所期望的那样,因为它的大小‘错误’。

代码语言:javascript
复制
int loop = sizeof(a)/sizeof(a[0]);
for(int i = 0; i <= loop; i++){
        printf("Array[%d] = %d\n", i, a[i]);
    }

产出(缺少要素3和4):

代码语言:javascript
复制
Array[0] = 0
Array[1] = 2
Array[2] = 4

非常感谢你的解释!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-30 21:52:47

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

代码语言:javascript
复制
void print_array(int a[], size_t s) {
  for (size_t i = 0; i < s; ++i) {
    ... a[i] ...
  }
}

你称之为:

代码语言:javascript
复制
print_array(a, 5);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64616205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档