1.20 数据类型本质

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
数据类型:
    基本类型:int、float double、char、void
    用户定义类型:枚举类型 enum
    结构类型:数组[]、结构struct、联合union、类class
    指针类型 *

数据类型的本质:数据类型可以理解为变量的模具,固定内存大小的别名
变量本质:一段连续内存的空间别名
变量名:相当于门牌号(指向内存块的地址)
内存:相当于房间

数据类型的作用:编译器预算对象(变量)分配的内存空间大小
注意:数据类型只是模具,编译器并没有分配空间,只有根据类型(模具),创建变量(实物),编译器才会分配空间

以下为本人对数名和数据空间的理解:
变量名和数据空间好比人跟空中的气球,每个人头顶都有放气球的空间;
可以不牵气球(只是定义,没有初始化的变量),
也可以牵着自己的气球(定义变量并且初始化了的),
也可以好几个人同时牵着一个气球(定义了指针变量的)
也可以一个人牵着好几个气球(结构体)。
*/

int main(void){
    int a;        //告诉编译器,分配4个字节
    int b[10];    //告诉编译器,分配4*10个字节

    /*数据类型本质测试*/
    printf("sizeod(a) = %d, sizeof(b) = %d\n", sizeof(a), sizeof(b));

    /*数组名称,数组首地址,数组首元素地址  这三个值相同*/
    printf("b:%d\n", b);    //打印地址,应该是%p,这里为了比较方便用了%d
    printf("&b:%d\n", &b);
    printf("&b[0]:%d\n", &b[0]);
    /*
    b和&b的数据类型不一样
    b:数组首元素地址,一个元素4个字节,+1 , 地址加4
    &b:整个数组的首地址,一个数组4*10=40字节,+1,地址加40
    &b[0]:明确的表示数组首元素地址,一个元素4个字节,+1 , 地址加4
    */
    printf("b+1:%d\n", b + 1);
    printf("&b+1:%d\n", &b + 1);
    printf("&b[0]+1:%d\n", &b[0] + 1);

    /*指针类型长度,32位程序,长度4;64位程序,长度8*/
    char **********p;
    int *q;
    printf("%d %d\n", sizeof(p), sizeof(q));

    system("pause");
    return 0;
}


 内存分析

【注:自己从老师讲解出理解的,不对的地方望指正】

【注:本程序验证是使用vs2013版】

posted @ 2019-06-24 06:34  大黄蜂_001  阅读(204)  评论(0编辑  收藏  举报