黑马程序员——c语言学习---变量与存储

-----------Java培训Android培训IOS培训.Net培训期待与您交流!------------ 
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还有其他一些用途、不在本节讨论。



-----------Java培训Android培训IOS培训.Net培训期待与您交流!------------ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值