1.与strlen()比较
strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。
而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
2.指针与静态数组的sizeof操作
指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。在64位系统下,指针变量的sizeof操作结果为8.
下面介绍一个64位系统下的关于sizeof的选择题。
struct
T
{
char
a;
int
*d;
int
b;
int
c:16;
double
e;
};
T
*p;
A sizeof(p) == 24 Bsizeof(*p) == 24 C sizeof(p->a) == 1 D sizeof(p->e) == 4
解析:
A sizeof(p)=8字节,因为p为指针。
C sizeof(p->a)=1字节,因为char在32位或64位系统中都是1个字节
Dsizeof(p->e)=8字节,因为double 是8个字节
B涉及到结构体的对齐问题使sizeof变得负责,思路:先考虑结构体的对界(对齐的上界)最大是double 8字节,然后按照结构体的字段顺序开始:
a(char) 1字节,补齐7字节
d(指针) 8字节,
b(int)4字节,c(位域2字节),补齐2字节
e(double)8字节
所以,一共4*8字节=32字节,答案只有C正确。
解释:int
c:16;
位域是指信息在存储时,并不需要占用一个完整的字节,
而只需占几个或一个二进制位。
详细介绍参考网页http://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html