美文网首页
sizeof用法总结

sizeof用法总结

作者: 里里角 | 来源:发表于2018-08-24 11:24 被阅读36次

基本概念:运算符,用于计算一个变量或数据类型的长度(在栈中分配的大小),以字节为单位。

在处理指针和数组上的特性

sizeof(数组首地址),得到输出数组所占地址空间的大小;
sizeof(指针)该系统中地址的字节宽度(32位为4);
如果是通过函数传递过的地址,会把数组首地址和指针无差别看做地址;

void test_sizeof_addr(char *a)
{
    printf("%d\n", sizeof(a));  //4
}
void test_sizeof_array(char a[])
{
    printf("%d\n", sizeof(a));//4
}
int main()
{
    char b[30];
    c=sizeof(b);// 30;
    test_sizeof_addr(b);
    test_sizeof_array(b);
 
    return 0;
}

处理字符串和字符数组上的特性

char *s1="0123456789"; //sizeof(s1)=4;
char s2[]=“0123456789”;//sizeof(s2)=11*1;
char s3[100]="0123456789";//sizeof(s3)=100*1;

10个特性

(0)sizeof是运算符,不是函数;
(1)sizeof不能求得void类型的长度;
(2)sizeof求得void类型的指针的长度;
(3)sizeof求得静态分配内存的数组的长度!
(4)sizeof不能求得动态分配的内存的大小!
(5)sizeof不能对不完整的数组求长度;
(6)当表达式作为sizeof的操作数时,它返回表达式的计算结果的类型大小,但是它不对表达式求值
(7)sizeof可以对函数调用求大小,并且求得的大小等于返回类型的大小,但是不执行函数体
(8)sizeof求得的结构体(及其对象)的大小并不等于各个数据成员对象的大小之和!
(9)sizeof不能用于求结构体的位域成员的大小,但是可以求得包含位域成员的结构体的大小!

位域

作用:压缩存储
格式:type [var] : digits;
type只能是int,unsigned int,signed int,char,unsigned char五种类型中的一种;
digits大小不能超过type类型占用的大小;
不能对其取地址;
无名位段的填充作用;
出现在表达式中,整型提升;
规则:

  1. 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;
  2. 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从的存储单元开始,其偏移量为其类型大小的整数倍;
  3. 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,经实验VC采取不压缩方式,即即使前一个字段有空余位足够容纳后一个字段,后一个字段也没有空余位,从前一个字段类型大小之后的新字节开始存储;
  4. 如果位域字段之间穿插着非位域字段,则不进行压缩;
  5. 整个结构体的总大小为最宽基本类型成员大小的整数倍。:

相关文章

  • sizeof用法总结

    基本概念:运算符,用于计算一个变量或数据类型的长度(在栈中分配的大小),以字节为单位。 在处理指针和数组上的特性 ...

  • Cocos2dx之C++基础(一)

    输入输出 sizeof用法cout<<"int size of :"<

  • sizeof()的用法

    1. 定义 sizeof 是一个操作符 operator,不是一个函数,其作用是返回一个对象或类型所占的内存字节数...

  • sizeof

    sizeof可以用来计算一个变量或一个常量、一种数据类型所占的内存字节数格式: 用法:sizeof(常量/变量)注...

  • new/delete用法

    new用法 1,开辟单变量地址空间 int *p = new int ;//开辟大小为sizeof(int)空间 ...

  • C++ sizeof的用法

    sizeof是一个操作符(operator)作用是返回一个对象或类型所占的内存字节数。返回值类型为size_t,可...

  • 05·iOS 面试题·Sizeof与Strlen的区别与联系

    前言 sizeof() 和 strlen() 在平时开发中使用的频率相对没那么高,个人觉得简单了解它们的用法及区...

  • 布尔

    sizeof(BOOL) = 1sizeof(bool) = 1sizeof(Boolean) = 1

  • 【C语言】3.sizeof

    1.sizeof sizeof并不是函数,而是运算符。可以用sizeof计算有多少字节。通常用sizeof(常量/...

  • C 基本数据类型内存

    sizeof long int=4; //这与int一样 sizeof shor int=2; sizeof do...

网友评论

      本文标题:sizeof用法总结

      本文链接:https://www.haomeiwen.com/subject/qjrbiftx.html