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. nagios中监测dns 227.7.128.68的网络状态

    [root@nhserver2 ~]# cd /usr/local/nagios/etc/objects [root@nhserver2 objects]# vim hosts_dns.cfgdefi ...

  2. 提取位于<title>...</title>内的文本标题内容

    #vim title.txt <title>nhlinkin</title> # cat title.txt  | sed 's:.*<title>\([^< ...

  3. c# 可变字符串 StringBuilder

    普通的string不可变,除非用+ 但是+两个字符串后 会生成一个新的string实例.会在内存中创建新的字符串对象.如果重复的对字符串修改,将极大的增加内存开销.c#提供了个可变的字符串序列Stri ...

  4. BZOJ 2005: [Noi2010]能量采集 [莫比乌斯反演]

    题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为. ...

  5. BZOJ 4078: [Wf2014]Metal Processing Plant [放弃了]

    以后再也不做$World Final$的题了................ 还我下午 bzoj上TLE一次后就不敢交了然后去uva交 Claris太神了代码完全看不懂 还有一个代码uva上竟然WA了 ...

  6. Windows Server 2016-部署额外域控制器

    我们一般所提到的所谓域外控制器,是指除域内第一台域控制器之外的其他域控制器.额外域控制器很多时候也有辅助域控一称.那么在同一域内安装多台域控制器有什么优点呢: 1.提高用户登录效率.多台域控制器可以同 ...

  7. ES6,Array.includes()函数的用法

    在ES5,Array已经提供了indexOf用来查找某个元素的位置,如果不存在就返回-1,但是这个函数在判断数组是否包含某个元素时有两个小不足,第一个是它会返回-1和元素的位置来表示是否包含,在定位方 ...

  8. 孤立的SQL用户

    问题 最近公司很多数据库在上云,也有一部分在下云.这期间出现了很多问题,其中一个比较恶心的问题就是"孤立用户".当数据库备份还原以后用以前的用户发现不能登录.一开始以为是登录账号没 ...

  9. CocosCreator游戏开发---菜鸟学习之路(三)如何在CocosCreator中使用Pomelo

    PS(废话): 这段时间都在研究网易的Pomelo框架,作为新手小白,自然遇到了不少坑爹的事情.(当然也有可能是因为自己技术不过关的原因所以导致在很多基础的问题上纠结了很久.)网上也搜索了好久,但是基 ...

  10. Install Centrifugo and quick start

    Install Centrifugo and quick start Go is a perfect language - it gives developers an opportunity to ...