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. matlab文件读写处理实例(三)——读取文件特定行

    (1) 读取文件特定行 CODE: ; ;        if nline==line               fprintf(fidout,'%s\n',tline);         data ...

  2. Lambda表达式详解 (转)

    前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自C#1.0后新增的最重要的功能之一 ...

  3. vim批量注释

    vim批量注释 法一.在vim中 :20,30 s/^/#/g 20-30行 用 # 注释掉.(python是用#注释地---) :20,30 s/^#//g 20-30行 取消注释 法二. 1.多行 ...

  4. jquery中ajax跨域提交的时候会有2次请求

    我们平时在同域中请求页面什么的时候不会有这种情况,这种情况大多发生在移动端的跨域请求中发生的. 解决方法就是在服务端中加一层过滤HTTP请求的类型,把OPTION等不用的类型过滤掉.就是当请求为非 H ...

  5. 08_Python编码与解码

    一.编码的由来 因为计算机只能处理010101二进制数据,如果要处理文本,图像,视频等,需要我们把数据转换成01010二进制格式才能被计算机处理 最先出现的是ASCII,用8位一个字节来表示,成为单字 ...

  6. Linux 虚拟机忘记root密码

    Linux 虚拟机忘记root密码可以按照下面的步骤重新设置密码: 1.在grub界面,也就是有press any key的那个界面,按下任意键 2.键入e,出现三行文字,按上下键选择kernel那一 ...

  7. 洛谷 [p1439] 最长公共子序列 (NlogN)

    可以发现只有当两个序列中都没有重复元素时(1-n的排列)此种优化才是高效的,不然可能很不稳定. 求a[] 与b[]中的LCS 通过记录lis[i]表示a[i]在b[]中的位置,将LCS问题转化为最长上 ...

  8. 快速傅里叶变换 & 快速数论变换

    快速傅里叶变换 & 快速数论变换 [update 3.29.2017] 前言 2月10日初学,记得那时好像是正月十五放假那一天 当时写了手写版的笔记 过去近50天差不多忘光了,于是复习一下,具 ...

  9. BZOJ 3782: 上学路线 [Lucas定理 DP]

    3782: 上学路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 192  Solved: 75[Submit][Status][Discuss] ...

  10. Code::Blocks 配置

    需要另外下载安装GCC编译器 配置主题皮肤: 先替换' default.conf ' (需要关闭code::blocks) Settings>Editor>(左栏)Syntax highl ...