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版】