1.基本数据类型占用字节(32位的机器)

    #include<stdio.h>

    #include<stdlib.h>

    void BytePossess()

    {

    printf(" char : %dByte\n",sizeof(char));

    printf(" signed char : %dByte\n",sizeof(signed char));

    printf(" unsigned char : %dByte\n",sizeof(unsigned char));

    printf(" short int : %dByte\n",sizeof(short int));

    printf(" unsigned short int : %dByte\n",sizeof(unsigned short int));

    printf(" int : %dByte\n",sizeof(int));

    printf(" signed int : %dByte\n",sizeof(signed int));

    printf(" unsigned int : %dByte\n",sizeof(unsigned int));

    printf(" long int : %dByte\n",sizeof(unsigned int));

    printf(" unsigned long int : %dByte\n",sizeof(unsigned long int));

    printf(" double : %dByte\n",sizeof(double));

    printf("  float : %dByte\n",sizeof(float));

    }

    char : 1Byte

    signed char : 1Byte

    unsigned char : 1Byte

    short int : 2Byte

    unsigned short int : 2Byte

    int : 4Byte

    signed int : 4Byte

    unsigned int : 4Byte

    long int : 4Byte

    unsigned long int : 4Byte

    double : 8Byte

    float : 4Byte

    2:结构体:涉及内存对齐以提高内存的利用率,位段的使用

    typedef struct

    {

    char a;

    int b;

    char c;

    }Astruct;

    struct Bstruct

    {

    char a;

    char b;

    int c;

    };

    struct Cstruct

    {

    int x:1;

    int y:14;

    int Z:32;

    int W:1;

    //    int z:33;//不可超过int 32的长度

    };

    int main()

    {

    BytePossess();

    printf("----------分割线-------------\n");

    char a=129;

    unsigned char b=-1;

    printf("%d\n",a);

    printf("%d\n",b);

    printf("----------分割线-------------\n");

    Astruct A;//Astruct是typedef定义的新类型,用这新类型定义变量

    struct Bstruct B;

    struct Cstruct C;

    printf("A:%dByte\n",sizeof(A));//32机器的内存是以4字节对齐的,char 4,int 4,char 4   总12

    printf("B:%dByte\n",sizeof(B));//char char 两个占4,int 4  总8//提高了内存的利用率

    printf("C:%dByte\n",sizeof(C));//位段:节省存储空间,还有好几个好处。自己百度,谷歌 源于虚拟主机推荐

    return 0;

    }

    ----------分割线-------------

    -127

    255

    ----------分割线-------------

    A:12Byte

    B:8Byte

    C:12Byte