传递给函数时数组长度的计算是否不同?

问题描述 投票:0回答:1

我真的不明白为什么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个回答
2
投票

由于array decay,该函数内的尺寸不正确。

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

但是在主函数中处理原始数组时并非如此,因此在那里可以得到正确的输出。

© www.soinside.com 2019 - 2024. All rights reserved.