下面是一个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) 时,sizeof() 运算符返回 40,但 8 strong> 当我使用 sizeof(a) 时。
这种行为的原因是什么?
最佳答案
简单,但令人困惑:int a[]
或 int a[42]
等函数参数调整为 int* a
。 func(int a[])
调整为
void func(int* a)
在这里,a
实际上只不过是一个指针。所以 sizeof(a)
是 sizeof(int*)
。
最重要的是,在许多情况下,数组会衰减为指针,例如当您将 arr
传递给 func
时。这使得这种情况发生
func(arr);
即使func
的参数是一个指针。
关于c++ - sizeof() 运算符为数组和指向数组的指针返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29148638/