C++ sizeof()运算符为数组和指向数组的指针返回不同的值
下面是一个C程序:C++ sizeof()运算符为数组和指向数组的指针返回不同的值,c++,c,arrays,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; } #包括 void func(int a[] { printf(“%d\n”,sizeof(a)); } int main() { int-arr[10];
#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;
}
#包括
void func(int a[]
{
printf(“%d\n”,sizeof(a));
}
int main()
{
int-arr[10];
printf(“%d\n”,sizeof(arr));
func(arr);
返回0;
}
现在的问题是,当我使用sizeof(arr)时,sizeof()操作符返回40,但当我使用sizeof(a)时返回8
这种行为的原因是什么?简单但容易混淆:函数参数如
int A[]
或int A[42]
被调整为int*A
<代码>函数(int a[])调整为
void func(int* a)
在这里,a
实际上只是一个指针。所以sizeof(a)
是sizeof(int*)
除此之外,数组在许多情况下都会衰减为指针,例如当您将arr
传递到func
时。这就允许这种情况发生
func(arr);
即使
func
的参数是指针。您正在将“指针”的大小与数组的实际大小进行比较。原因是这两个参数的大小不同。你应该解释一下为什么你希望结果是一样的。我希望两种情况下的结果都是40。如果我不把数组作为函数参数传递,并用一个本地指针指向它,那么问题也不会出现solved@ashishbhat指针的大小是指针的大小。没有什么能改变这一点。虽然我不确定“问题”是什么。数组名和指针之间有区别吗?@ashishbhat无法知道函数中数组的大小,如果需要,则需要向函数func(int*a,size\t num\u of_元素){…}传递一个附加参数
@ashishbhat在许多情况下,数组名可能会衰减为指针。其中之一是将其作为参数传递给参数为指针的函数(如func
),但数组和指针是不同的(从运行程序中可以看出)