1
2
3
4
5
6
7
8
9
10
11
12
13
14
void t(int* a){
cout<<sizeof(a)<<endl;//8
}

int main(int argc, char const *argv[])
{

int a[5]={1,2,3,4,5};
t(a);

cout<<sizeof(a)<<endl;//20

return 0;
}

很明显cout的那么两行,是同样的,但为什么输出一个是8,一个20呢?我们已知64位的gcc中一个pointer是由8bytes的。所以,传递数组名(地址)给函数,sizeof计算的是a的指针大小,不是整个数组的大小。

此技巧仅适用于数组,不适用于指针:

1
sizeof(b) / sizeof(b[0])