7.1.4 用错sizeof
运算符sizeof()可以计算数组的大小(字节数),但对指针来说,sizeof仅仅得到指针变量的字节数。当数组作为函数的参数进行传递时,数组退化为同类型的指针,用sizeof是无法取得数组的大小的。代码7.3演示了sizeof的用法。
代码7.3 sizeof用法AboutSizeof
<————————————-文件名:example703.cpp——————————————-> 01 #include<iostream> 02 using namespace std; 03 void test(char str[20]) 04 { 05 cout<<"sizeof(str):"<<sizeof(str)<<endl; 06 } 07 int main() 08 { 09 char str1[20]="1234567890123456789"; 10 cout<<"sizeof(str1):"<<sizeof(str1)<<endl;//字符数组的大小 11 test(str1);//字符数组作为参数传递时,退化为指针 12 char*pChar=str1; 13 cout<<"sizeof(pChar):"<<sizeof(pChar)<<endl;//指针pChar占据的内存大小 14 return 0; 15 }
输出结果如下所示。
sizeof(str1):20 sizeof(str):4 sizeof(pChar):4
【代码解析】在大小为20的char型数组作为函数参数进行传递时,在函数test()内,代码第5行,对数组的sizeof()操作返回的只是指针大小,无法返回数组的大小。