【问题标题】:Are array lengths calculated differently when passed onto functions?传递给函数时,数组长度的计算方式是否不同?
【发布时间】:2020-03-20 10:15:35
【问题描述】:

我真的不明白为什么main中的函数和计算没有给出相同的答案。

函数打印 1 并且主打印中的计算 8 - 正确的大小:

#include <stdio.h>

void size(const int a[]) {
  printf("%i\n",sizeof(a) / sizeof(a[0]));
}

 int main(void) {
  int array[] = { 5, 2, 4, 6, 1, 7, 3, 3 };
  printf("%i\n", (sizeof(array) / sizeof(array[0])));
  size(array);
  return 0;
}

【问题讨论】:

标签: c arrays function size calculation


【解决方案1】:

由于array decay,您在该函数中得到了不正确的大小。

当您将数组传递给函数时,您的数组会变成一个指针,sizeof(pointer) / sizeof(arr[0]) 会给您 1,因为在您当前的架构配置中,指针的大小是 4 个字节,整数的大小也是 4 个字节。

但当您在 ​​main 函数中处理原始数组时,情况并非如此,因此您可以在那里得到正确的输出。

【讨论】:

  • 这不是最好的链接。通常 GeeksForGeeks 会提供不正确的示例或“有效”但具有未定义行为的事物。
  • @S.S.Anne 我知道,当我觉得 OP 是初学者时,我会链接 gfg :P 无论如何,既然你有不错的声誉,请随时编辑我的答案 :) 我有一个糟糕的一天,哈哈
  • ...我同意你们俩:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2015-03-07
  • 1970-01-01
  • 2020-08-16
  • 2013-07-11
  • 1970-01-01
相关资源
最近更新 更多