以下是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)时 这种行为的原因是什么?
答案 0 :(得分:2)
简单但令人困惑:int a[]
或int a[42]
等功能参数会调整到int* a
。 func(int a[])
已调整为
void func(int* a)
在这里,a
实际上只不过是一个指针。因此sizeof(a)
为sizeof(int*)
。
最重要的是,在许多情况下,数组可以衰减指针,例如当您将arr
传递给func
时。这允许这种情况发生
func(arr);
即使func
的参数是指针。
答案 1 :(得分:1)
您正在比较&#34;指针&#34;的大小。到数组的实际大小。