1.sizeof是一个单目运算符,不是一个函数。sizeof运算符是获取其 *** 作数所占内存空间的字节数,sizeof的 *** 作数可以是类型名,也可以是表达式。
int a = 1; double b = 1.5; sizeof(int);//结果为4 sizeof(a);//结果为4 sizeof(a+b);//结果为8
获取double 类型数组darray的元素个数:
int count = sizeof(darray) /sizeof(double);
计算字符串长度应该使用strlen函数,不要用sizeof运算符。
sizeof是一个运算符,用于获取类型或表达式所占内存的大小,
strlen是一个函数,用于计算字符串中字符的个数,其中字符串结束符不会被计算在内。
char 占1个字节。
short 占2个字节。
int 占4个字节。
float 占4个字节。
double 占8个字节。
内存对齐问题。
计算如下结构体所占内存字节数
struct s1{ char a; short b; int c; double d; float f; }
struct s2{ char a; short b; double d; int c; }
由上可知s1中,a占1个字节,b占2个字节,c占4个字节,d占8个字节,f占4个字节。但是简单的相加结果是错误的(1+2+4+8+4=19),没有考虑到对齐的问题。
正确的结果应该是1+(1)+2+4+8+4 = 20
由上可知s2中,a占1个字节,b占2个字节,d占8个字节,c占4个字节。但是简单的相加结果是错误的(1+2+8+4=15),没有考虑到对齐的问题。亦或是1+(1)+2+8+4= 16也是错误的。
正确的结果是1+(1)+2+(4)+8+4+(4)=24
特别注意:
1.数据对齐是指在处理结构体中的成员时,成员在内存中的起始地址编码必须是该成员类型所占字节数的整数倍。
2.结构体sizeof的计算结果必须是结构体中占用空间最多的成员所占空间的整数倍。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)