sizeof()运算符为数组和指向数组的指针返回不同的值

时间:2015-03-19 15:27:26

标签: c++ c arrays

以下是C程序:

#include<stdio.h>

void func(int a[])
{
  printf("%d\n",sizeof(a));
}

int main()
{
  int arr[10];
  printf("%d\n",sizeof(arr));
  func(arr);
  return 0;
}

现在的问题是当我使用 sizeof(arr)但是 8时, sizeof()运算符返回 40 当我使用 sizeof(a)时 这种行为的原因是什么?

2 个答案:

答案 0 :(得分:2)

简单但令人困惑:int a[]int a[42]等功能参数会调整int* afunc(int a[])已调整为

void func(int* a)

在这里,a实际上只不过是一个指针。因此sizeof(a)sizeof(int*)

最重要的是,在许多情况下,数组可以衰减指针,例如当您将arr传递给func时。这允许这种情况发生

func(arr);

即使func的参数是指针。

答案 1 :(得分:1)

您正在比较&#34;指针&#34;的大小。到数组的实际大小。