不同数据类型所占内存的字节数

您所在的位置:网站首页 float占用字节 不同数据类型所占内存的字节数

不同数据类型所占内存的字节数

2023-01-04 04:29| 来源: 网络整理| 查看: 265

不同基本类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占用 1 个字节。数组是在其他数据类型的基础上构造出来的,是一种派生数据类型。

如果有一维数组定义如下:

int c[5], f[10];

那么编译器就在内存中为数组c分配了 5 个int类型的内存空间,共 5×4=20 个字节,并为它们起了一个名字,叫 c,数组c的类型是int [5];同理数组f是类型是int [10],占内存 40 个字节。数组类型所占字节数由数组元素的类型和数组长度决定。

如果有二维数组定义:

int s[3][4],t[2][5];

C 语言是把二维数组分解为多个一维数组来处理。数组s类型是int [3][4],编译器将二维数组s分解为 3 个长度为 4 的一维数组s[0]、s[1]、s[2],即这三个一维数组的类型是int [4],在内存中是按行排列的,也就是先存放s[0]行,再存放s[1]行,最后存放s[2]行,每行中的 4 个元素也是依次存放,整个数组共占用 3×(4×4) = 48 个字节。    同理,二维数组 t 类型是int [2][5],t 可分解为 2 个长度为 5 的一维数组t[0]、t[1],即两个一维数组的类型类型是int [5],t 占内存 40 个字节。在概念上二维数组有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。    C 语言提供单目运算符 sizeof,返回一个变量或者类型所占内存的字节数,变量或者类型所占据的内存单元的字节数与机器字长和编译器有关系。现有一段程序如下:

#include int main (){ int a, b[5],c[10],d[3][4],e[2][5];printf("a = %d\n",sizeof(a) );printf("b = %d\n",sizeof(b) );printf("b[0] = %d\n",sizeof(b[0]) );printf("c = %d\n",sizeof(c) );printf("d = %d\n",sizeof(d) );printf("d[0] = %d\n",sizeof(d[0]) );printf("d[0][0] = %d\n",sizeof(d[0][0]) );printf("e = %d\n",sizeof(e) );printf("e[0] = %d\n",sizeof(e[0]) );printf("e[0][0] = %d\n",sizeof(e[0][0]) );return 0;}

运行这段程序,应该可以获取到类似如下结果(不同编译器运行的结果可能不一致): a = 4 b = 20 b[0] = 4 c = 40 d = 48 d[0] = 16 d[0][0] = 4 e = 40 e[0] = 20 e[0][0] = 4

#include  

int main ()

{

    char a2, b2[5],c2[10],d2[3][4],e2[2][5];

    double a3, b3[5],c3[10],d3[3][4],e3[2][5];

    float a4, b4[5],c4[10],d4[3][4],e4[2][5];

    /*****输出a2,b2, b2[0],c2,d2,d2[0], d2[0][0],e2,e2[0],e2[0][0]所占内存的字节数*****/

    /********** Begin *********/

    printf("a2 = %d\n",sizeof(a2));

    printf("b2 = %d\n",sizeof(b2));

    printf("b2[0] = %d\n",sizeof(b2[0]));

    printf("c2 = %d\n",sizeof(c2));

    printf("d2 = %d\n",sizeof(d2));

    printf("d2[0] = %d\n",sizeof(d2[0]));

    printf("d2[0][0] = %d\n",sizeof(d2[0][0]));

    printf("e2 = %d\n",sizeof(e2));

    printf("e2[0] = %d\n",sizeof(e2[0]));

    printf("e2[0][0] = %d\n",sizeof(e2[0][0]));

    /********** End **********/

    printf("a3 = %d\n",sizeof(a3));

    printf("b3 = %d\n",sizeof(b3));

    printf("b3[0] = %d\n",sizeof(b3[0]));

    printf("c3 = %d\n",sizeof(c3));

    printf("d3 = %d\n",sizeof(d3));

    printf("d3[0] = %d\n",sizeof(d3[0]));

    printf("d3[0][0] = %d\n",sizeof(d3[0][0]));

    printf("e3 = %d\n",sizeof(e3));

    printf("e3[0] = %d\n",sizeof(e3[0]));

    printf("e3[0][0] = %d\n",sizeof(e3[0][0]));

    /*****输出a3,b3, b3[0],c3,d3,d3[0],d3[0][0],e3,e3[0],e3[0][0]所占内存的字节数*****/

    /********** Begin *********/

    printf("a4 = %d\n",sizeof(a4));

    printf("b4 = %d\n",sizeof(b4));

    printf("b4[0] = %d\n",sizeof(b4[0]));

    printf("c4 = %d\n",sizeof(c4));

    printf("d4 = %d\n",sizeof(d4));

    printf("d4[0] = %d\n",sizeof(d4[0]));

    printf("d4[0][0] = %d\n",sizeof(d4[0][0]));

    printf("e4 = %d\n",sizeof(e4));

    printf("e4[0] = %d\n",sizeof(e4[0]));

    printf("e4[0][0] = %d",sizeof(e4[0][0]));

    /********** End **********/

    return 0;

}



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3