数组及其长度。与在主循环中相比,它们在函数内部的计算是否不同?

问题描述 投票: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;
}
arrays function printing size calculation
1个回答
1
投票

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

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

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

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