美文网首页
变量与存储

变量与存储

作者: labi3285 | 来源:发表于2017-09-14 21:43 被阅读12次

c语言中包含char、int、float、double等基本数据类型,本节主要研究一下这些基本数据类型的特点及存储。

1、要用到的东西

a、sizeof函数,stdio.h中的函数,该函数接受一个变量,输出该变量的大小,单位为byte;
b、存储地址输出,用到&操作符,“&变量名”表示该变量的地址。

2、直接开始

废话不多说,直接上程序:

char a;  
int b;  
float c;  
double d;  
  
printf("a的地址为: %p [char]   [%d Byte] \n",&a,(int)sizeof(a));  
printf("b的地址为: %p [int]    [%d Byte] \n",&b,(int)sizeof(b));  
printf("c的地址为: %p [float]  [%d Byte] \n",&c,(int)sizeof(c));  
printf("d的地址为: %p [double] [%d Byte] \n",&d,(int)sizeof(d)); 

该程序段通过地址操作及sizeof函数,分别算出char、int、float、double类型变量的地址和大小,注意这4个变量是按顺序创建的,我们看看输出结果:

a的地址为: 0x7fff5fbff8db [char]   [1 Byte]   
b的地址为: 0x7fff5fbff8d4 [int]    [4 Byte]   
c的地址为: 0x7fff5fbff8d0 [float]  [4 Byte]   
d的地址为: 0x7fff5fbff8c8 [double] [8 Byte]  

从输出结果可以看出各数据类型分别占用的空间:
char类型:1字节;
int类型:4字节
float类型:4字节
double类型:8字节
从地址方面来分析:
按照a、b、c、d创建的顺序可以发现,地址是按照从大到小的顺序来存储的,而如果重新打开程序的话,这些地址会发生变化,但是两个地址之间的差值不变。进一步分析,可以发现,char类型的数据虽然只有1byte,但是却占据4byte。
进一步验证:

char aa;  
char bb;  
int ff;  
printf("char %p \n",&aa);  
printf("char %p \n",&bb);  
printf("int  %p \n",&ff); 

我通过在int类型前面创建两个char变量,结果又会如何呢?我们推测这两个char数据也是占有4byte,看看是否正确:

char 0x7fff5fbff8c7   
char 0x7fff5fbff8c6   
int  0x7fff5fbff8c0  

结果是正确的。

3、结论

a、char数据的建立以4byte为单位
b、int/float数据以4byte为单位
c、double数据以8byte为单位

4、注意点

a、本次测试的环境为macbook air 64位,在其他环境下可能略有不同;
b、以上得出的结论并不是完整的推论,只是做简单的探讨,如考虑short等类型数据,char可能占有的就是2字节。
c、sizeof还有其他一些用途、不在本节讨论。

相关文章

  • 变量与存储

    c语言中包含char、int、float、double等基本数据类型,本节主要研究一下这些基本数据类型的特点及存储...

  • 变量的静态存储与动态存储

    首先,静态存储与动态存储都是变量在内存中的存储方式。 C语言中变量分为局部变量(auto)、寄存器变量(regis...

  • 每天学一点Swift----面向对象上(四)

    七.存储属性 1.存储属性指的是存储在类、结构体里的变量或常量。 2. Swift中定义存储属性的语法与定义变量或...

  • C++变量类型

    C++中变量的定义与声明 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据...

  • Python的数据类型

    变量和简单数据类型 变量 每个变量存储了一个值——与变量相关联的信息。在HelloPython文件中,存储的值为文...

  • 存储过程的使用(三)使用DECLARE定义局部变量

    使用DECLARE定义局部变量 在流程语句的分析中,我们在存储过程中使用变量的声明与设置,由于这些变量也只能在存储...

  • Java基础篇

    堆栈 栈 存储局部变量 存储方法调用 堆 存储Java对象(成员变量 局部变量 类变量 ->指向的对象都存储在堆内...

  • 2018-10-22

    数据存储与变量 (1)数据存储 什么是数据?就print函数而言,数据是需要打印的内容。有时内容过长,需要借助变量...

  • javaScript变量

    变量就是用于存储信息的“容器”。 例: javaScript变量 与代数一样,javaScript变量可用于存放值...

  • iOS开发技能树之C语言-指针

    一、指针与指针变量 指针:就是地址,一个变量的指针就是这个变量的存储地址。 指针变量:用来存放指针(地址)的变量,...

网友评论

      本文标题:变量与存储

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