sizeof运算符
本以为自己对sizeof掌握的还不错,结果还是会因为粗心大意而错误。
1)sizeof不是函数,也不是运算符,它是一个类似宏定义的特殊关键字。sizeof后面跟类型(如int)需要加括号,跟变量不需要括号。
2)int ival = 4; 计算sizeof(a)的时候,不论a的值是什么,都会被替换成sizeof(int),结果为4。
3)如果是int ival = 4; sizeof(ival = 5); 呢? 语句执行结束后,ival的值为5。和sizeof(a)一样,被替换为sizeof(int)。需要注意,ival=5是不会被编译的。所以ival的值依旧为4。
4)对函数调用sizeof。sizeof(fun()); 在编译阶段,sizeof的操作数会被函数的返回值所取代。也就是说计算的是函数返回值的大小。
下面的代码,我大意算错了:空格害死粗心人啊,那个二维字符数组的大小也比较雷人,不留心机会计算错误。
char a[] = "abcdf "; int b[20] = {3,4}; char c[2][3] = {"aa ", "bb "}; cout << sizeof(a) << endl; //7,注意空格和'\0' cout << sizeof(b) << endl; //20*4 cout << sizeof(c) << endl; //6