1、sizeof和strlen有哪些区别?
区别如下:
(1)sizeof是操作符,strlen是函数。
(2)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型,该类型保证能容纳实现所建立的最大对象的字节大小。
(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。
(5)sizeof在编译的时候已经计算完毕了,所以sizeof可以测数据类型,strlen的结果在运行的时候计算,而且只是用来计算字符串长度,不能计算类型长度。
(6)sizeof后如果是类型,必须加括弧,如果是变量名,可以不加括弧。
(7)在计算字符串数组的长度上有区别。例:
[cpp] view plain copy
char str[20] = "0123456789";
int a = strlen(str);
int b = sizeof(str);
a计算的是字符串的长度,为10
b计算的str【20】的内存空间,为20
(8)如果要计算指针指向的字符串长度,必须使用strlen。
2、联合体的大小取决于它所有的成员中占用空间最大的一个成员的大小,并且对于复合数据类型,如union、struct、class的对齐方式为成员中最大的成员对齐方式。
3、#pragma pack(1)的作用就是将对齐方式设为1。
4、<>表示这个文件是一个标准头文件,查找时,编译器直接去预定义的目录,可以在编译器的设置里面更改目录。“”表示这个文件是程序员自己写的工程中的头文件,查找该文件时,先从当前目录查找,然后到标准位置寻找。
5、&&是逻辑与 即判断&&两侧的表达式是否都为真,都为真则此&&表达式值为真;& 是按位与 即将&两侧的数用二进制展开,每一位都求与运算(二进制与运算,跟逻辑与差不多),最后得到的二进制数即为结果;逻辑与结果只讲真和假,而按位与得出的却是实实在在的一个数。