c语言 sizeof理解

1、基本数据类型 char :1     short:2   int 4    long 4   long long :8    float:4    double :8字节。

2、数组:对应的基本数据类型的sizeof值*长度 例如 int arr[20] ; sizeof(arr) 的值就是 80。

3、结构体类型:

  A:

  结构体类型的sizeof的返回值不是将内部的值简单的相加,而是根据内部最大的数据类型分配地址空间的 ,

以最大数据类型所占字节为基本单位增加空间。且一定是最大值的整数倍。举例如下

  struct test {

    int num;

    char ch;

    double dou;

  }te;

  则sizeof(te)的值不是13而是16,只是为什么了 ,我们来分析一下,就如上面所说最大类型为double,他的值

为8,16真好是他的2倍,以为一个double占了8个字节,就还剩下8个字节,int 占4个 char 占1个 所以说其实还有

3个字节根本就没用,但这就结构体分配内存的规则。

  B:

  现在我们将在结构体内部添加一个long类型,看看结果如何

  struct test {

    int num;

    char ch;

    double dou;

    long l;

  }te;

  此时sizeof(te)的值应该就是24字节,可以自己试试以为一个double 一个int 一个long就是16字节,还多一个char

则还要分配8个字节出来。

  C:

  另外如果如果结构体中存在数组类型,不影响上述配备,直接加上数组的大小 如下

  struct test {

    int num;

    char ch;

    double dou;

    long l;

    double d[3];

  }te;

  此时sizeof(te) 的值为48,直接24+24。

  D:

  最后结构体中有结构体类型,不会一个结构体类型为最大类型值,而是内部结构体中的最大值和最大值类型比较,取最大的。

  struct test2 {

    struct test te;

    int i;

  }te2;

  则sizeof(te2)的值为56

  补充 ,如int arr[3]是数组类型的int,也要参与比较。

  

时间: 2024-10-11 19:51:20

c语言 sizeof理解的相关文章

用三分钟理解c语言sizeof

一.概念 sizeof是单目操作符,同++等操作符一样.作用是以字节形式输出操作对象所在储存大小. 二.用法 a.操作数据类型 如sizeof(int),输出int类型在内存中所占的字节长度,具体取决于具体环境,本机输出为4. b.操作变量 如 char a[6]; printf("%d\n" ,sizeof(a)),因为已经定义了char数组长度,所以输出值为6. 三.常见问题 有以下几个例子,需要引起注意: 例子1: int testSizeOf(char x[]) { retur

《七周七语言:理解多种编程范型》のIo课后习题答案

哎,因为上周忙着写OAuth2.0服务端框架草稿 ,耽误了一周学习Io Language了. 本篇习题解答是接着 <七周七语言:理解多种编程范型>のRuby课后习题答案 Io是原型语言,类似于JavaScript,并不区别类和对象,所有的东东都是对象,对象的数据结构就是由键值表来维护的(在Io中就是所谓的槽),通过各种消息传递给对象来实现打印输出,复制对象等功能.因为语法非常简单(也木有语法糖),所以你可以尽情构建自己的库和功能. 第一天: 1. 对1+1求值,然后对1+"one&q

ios-(2)第一个C语言程序(理解编译、连接、运行)

一.开发工具的选择 1. 可以用来写代码的工具:记事本.ULtraEdit.Vim.Xcode等. 2. 选择XCode的原因:苹果公司官方提供的开发利器.简化开发的工程.有高亮显示功能. 3. 使用XCode新建一个C程序的源代码文件(扩展名为.c或者.C) # 开发XCode # 新建文件 # 选择文件类型 .c 二.代码编写 1.程序结构 * C程序的结构:由函数组成 # 任何一个C语言程序都市有一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为"函数&q

堆栈--java语言的理解

堆栈 1,概要 堆栈是两种数据结构.堆栈都是一种数据项按序排列的的数据结构,只能在一端进行(称为栈顶(top))对数据项进行插入和删除. 要点:堆,列队优先,先进先出.栈,后进先出(Last-In/ First-Out). 2,对比(Java语言) 1.栈(stack)和堆(heap)都是java用来在Ram中存放数据的地方. 2.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小和生存期必须是确定的,缺乏灵活性.另外,栈数据可以共享.堆的优势是,可以动态

对于语言的理解

本文来聊聊语言,笔者前后已经接触过近10种编程语言,回过头想想,才慢慢的了解编程语言的本质. 按个人理解,编程语言和自然语言(指人类交流语言,如汉语,英语)本质上并无区别.为什么?用看程序语言的方式看自然语言,那么:自然语言有很多个关键字或者说全局变量(各种词语.单词),这些关键字经过一定的语法排列最终可以形成各种句式,通过这些句式可以实现人与人之间的交流.自然语言也可以定义“变量”,也就是造新词,只不过现在自然语言的词库已经很庞大了,基本不需要新的词语. 编程语言与自然语言的区别一个是前面说的

C语言:sizeof()运算符

sizeof可以用来计算一个变量,一个常量,一种数据类型所占的内存字节数 sizeof一共有3种形式 sizeof(变量\常量) sizeof(10); char c = 'a';sizeof(c); sizeof 变量\常量 sizeof 10;char c = 'a';sizeof c; sizeof(数据类型) sizeof(float); 注意:不能sizeof 数据类型

《七周七语言:理解多种编程范型》のruby课后习题答案

本系列是<七周七语言>的课后习题答案.这本书不拘泥于语法细节,而是横向比较各种编程语言(非热门)之间的编程范式. 是本对编程觉悟能有所帮助的好书,这里就不多做介绍了,感兴趣的同学不妨去看一下. 不得不说,Ruby的风格很黑客. 1. 打印字符串"Hello, world." puts "Hello, world." 2. 在字符串“Hello, Ruby.”中,找出"Ruby."所在下标. puts "Hello, Ruby

C语言 sizeof

sizeof 可以用来获取类型.数组和表达式的字节数 Example: 获取数组长度: int arrLen = sizeof(array) / sizeof(array[0]); Remarks: 数组作为形参时自动退化为指针(不论是定长或变长),所以sizeof(array)为指针长度

C语言指针理解patr1

今天在看<Head First C语言>中,书中的代码是*lat=*lat+1;我则写成了*lat++:结果是并不能得到lat指针的内容加一.之后发现原来在C语言中*解指针运算符 与++后自增运算符的优先级是相同的,*p++,后自增运算符++只作用于p,并不能作用于*p(如果*的优先级更高的话才行). 之后在调试中又发现了一个之前不了解的地方,在C语言中栈的存储是向低地址扩展,也就是先声明的变量在内存中反而内存地址是更大的. 1 #include <stdio.h> 2 void