2016-12-29 49 views
0

考虑这两个方案:在不同的场景中获得sizeof(arr)的不同答案?

//////////////////////计划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; 
} 

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

回答

1

arr已经腐烂一旦传递到print就会变为指针类型。因此,该函数中的sizeof会在您的平台上产生指向int的指针的大小。

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