在不同的情况下对 sizeof(arr) 得到不同的答案?;

getting different answer for sizeof(arr) in different scenario?;

考虑这两个程序:

/////////////////////程序 1////////////

void print(int arr[])
{
 int *p=arr;
 cout<< sizeof(arr)<<endl; //// here it is 8 
}

int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
print(arr);
return 0;
}

/////////////////////////// ///////////////////程序 2//////////

#include <stdio.h>
int main()
{
int arr[] = {10, 20, 30};
printf("%ld \n",sizeof(arr)); /// here it is 12
return 0;
}

////////////

arr 在传递给 print 已衰减 为指针类型。因此,该函数中的 sizeof 会产生指向您平台上 int 的指针的大小。

在程序 2 中,没有发生衰减:arr 的类型是 3 int 的数组。大小是sizeof(int) * 3.