同学让我看了一道题:
int getsize(char p[100]="hello") { return sizeof(p); } int main(int argc, char* argv[]) { char a[200]="hello!"; cout<<sizeof(a)<<endl<<getsize("OK")<<endl; return 0; }
第一个返回200,第二个却返回4,sizeof(a)返回数组的大小,而第二个实际上是指针变量的大小,怎么回事呢?
在网上看到强人分析的MSDN才知道原因:
sizeof操作的是一个结构体或者变量时,返回值为它的实际大小,这个实际大小可能包括为了字节对齐插入的多余字节。 第二句:如果操作的是一个静态大小的数组,返回整个数组的大小 第三句:sizeof操作符不能返回动态开辟的数组或形参数组的大小。 如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小,所以是4