sizeof函数的结果:

  1. 变量:变量所占的字节数。

    int i = ;
    printf("%d\n", sizeof(i)); //
  2. 数组:数组所占的字节数。
    int  arr_int1[] = {,,,,};
    int arr_int2[] = {,,,,};
    printf("size_arr1=%d\n",sizeof(arr_int1)); //5*4=20
    printf("size_arr2=%d\n",sizeof(arr_int2)); //10*4=40
  3. 字符串:其实就是加了'\0'的字符数组。结果为字符串字符长度+1。
    char str[] = "str";
    printf("size_str=%d\n",sizeof(str)); //3+1=4
  4. 指针:固定长度:4(32位地址环境)。
    • 特殊说明:数组作为函数的入口参数时,在函数中对数组sizeof,获得的结果固定为4:因为传入的参数是一个指针。

      int Get_Size(int arr[]) {
      return sizeof(arr);
      } int main() {
      int arr_int[] = {,,,,};
      printf("size_fun_arr=%d\n",Get_Size(arr_int)); //
      }
  5. 结构体
    1. 只含变量的结构体:
      1. 结果是最宽变量所占字节数的整数倍:[4 1 x x x]

        typedef struct test {
        int i;
        char ch;
        }test_t;
        printf("size_test=%d\n", sizeof(test_t)); //
      2. 几个宽度较小的变量可以填充在一个宽度范围内:[4 2 1 1]
        typedef struct test {
        int i;
        short s;
        char ch1;
        char ch2;
        }test_t;
        printf("size_test=%d\n", sizeof(test_t)); //
      3. 地址对齐:结构体成员的偏移量必须是其自身宽度的整数倍:[4 1 x 2 1 x x x]
        typedef struct test {
        int i;
        char ch1;
        short s;
        char ch2;
        }test_t;
        printf("size_test=%d\n", sizeof(test_t)); //
    2. 含数组的结构体:包含整个数组的宽度。数组宽度上文已详述。[4*10 2 1 1]
      typedef struct test {
      int i[];
      short s;
      char ch1;
      char ch2;
      }test_t;
      printf("size_test=%d\n", sizeof(test_t)); //
    3. 嵌套结构体的结构体
      1. 包含整个内部结构体的宽度(即整个展开的内部结构体):[4 4 4]

        typedef struct son {
        int name;
        int birthday;
        }son_t; typedef struct father {
        son_t s1;
        int wife;
        }father_t; printf("size_struct=%d\n",sizeof(father_t)); //
      2. 地址对齐:被展开的内部结构体的首个成员的偏移量,必须是被展开的内部结构体中最宽变量所占字节的整数倍:[2 x x 2 x x 4 4 4]
        typedef struct son {
        short age;
        int name;
        int birthday;
        }son_t; typedef struct father {
        short age;
        son_t s1;
        int wife;
        }father_t; printf("size_struct=%d\n",sizeof(father_t)); //

C语言中的sizeof函数总结的更多相关文章

  1. 转]解析C语言中的sizeof

    解析C语言中的sizeof 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出 了其操作数的存储大小.操作数 ...

  2. c语言中的rewind函数,Win CE 不支持,可用fseek函数替换

    FILE *read = fopen(cXmlFile,"rb"); if (read) { fseek(read, 0L, SEEK_END); int len = ftell( ...

  3. c语言中的malloc函数

    少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存 ...

  4. C语言中的sizeof()

    sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着"辛苦我一个,幸福千万人"的伟大思想,我决定将其尽可能详细的总结一下. 但当我总结的时候才发现,这个 ...

  5. linux下C语言中的flock函数用法 【转】

    表头文件  #include<sys/file.h> 定义函数  int flock(int fd,int operation); 函数说明  flock()会依参数operation所指 ...

  6. C语言中的memset函数和数组指针

    代码: #include <iostream> #include <cstring> using namespace std; int main(){ ] = {}; mems ...

  7. C语言中的sizeof和strlen

    1.sizeof是算符,strlen是函数: 2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的: 3.大部分编译程序,在编译的时候就把sizeof计算 ...

  8. linux下C语言中的flock函数使用方法 .

    表头文件  #include<sys/file.h> 定义函数  int flock(int fd,int operation); 函数说明  flock()会依參数operation所指 ...

  9. C语言中的sizeof解析

    1. 定义:sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数.返回 值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系统 ...

随机推荐

  1. JS对象、原型链

    忘记在哪里看到过,有人说鉴别一个人是否 js 入门的标准就是看他有没有理解 js 原型,所以第一篇总结就从这里出发. 对象 JavaScript 是一种基于对象的编程语言,但它与一般面向对象的编程语言 ...

  2. bzoj 4827: [Hnoi2017]礼物 [fft]

    4827: [Hnoi2017]礼物 题意:略 以前做的了 化一化式子就是一个卷积和一些常数项 我记着确定调整值还要求一下导... #include <iostream> #include ...

  3. HDU D Tree [点分治]

    传送门 题意:找路径积$\mod 1e6+3 = k$的字典序最小点对 作为一个点分治蒟蒻,写这道题花了两节课.... 显然只要开一个桶$c[i]$记录当前路径积为$i$的最小点 然后处理一个子树时一 ...

  4. 【转】我读过最好的epoll讲解(来自知乎)

    首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象.不管是文件,还是套接字,还是管道,我们都可以把他们看作流.之后我们来讨论I/O的操作,通过read,我 ...

  5. Linux 下编写服务器程序时关于Address already in use 的小错误

    新手,,学习linux服务器编程的时候,bind()函数出现了Address already in use 的错误,这是因为上一次bind过后,还未释放,,只要在socket和bind之间加一个函数就 ...

  6. 【转】JavaScript的三种消息框alert,confirm,prompt

    1. alert是弹出警告框,在文本里面加入\n就可以换行.2. confirm弹出确认框,会返回布尔值,通过这个值可以判断点击时确认还是取消.true表示点击了确认,false表示点击了取消.3. ...

  7. 2018/2/13 ElasticSearch学习笔记三 自动映射以及创建自动映射模版,ElasticSearch聚合查询

    终于把这些命令全敲了一遍,话说ELK技术栈L和K我今天花了一下午全部搞定,学完后还都是花式玩那种...E却学了四天(当然主要是因为之前上班一直没时间学,还有安装服务时出现的各种error真是让我扎心了 ...

  8. Asp.Net Core 2.0 之旅---在Ubuntu上部署WEB应用程序

    1.Ubuntu 上 安装NET Core 2.0 SDK 第一步的安装,微软大佬已经写的非常详细了=>直达链接,按照教程来即可. 2.将我们的WEB 发布到一个文件夹,将这个文件夹打包成 压缩 ...

  9. typedef struct 的用法

    typedef struct stu { int age; char name[20]; }stu,*pstu; stu stu1;相当于struct stu stu1; pstu pstu1;相当于 ...

  10. 高仿QQ Xplan的H5页面

    概述 这个h5的主要玩法很简单:地球自转的时候会播放背景音乐(比如海浪声),为了找到这个声音是从哪个地球上哪个地方传来的,需要长按下方的按钮,这时地球会自动转动到目标地点,然后镜头拉近,穿过云层,最后 ...