c语言指针和内存原理(1)
c语言指针和内存原理(1)
分配内存
c语言常见的分配内存主要为变量声明和malloc方法,这篇文章主要讨论变量声明部分
变量声明包含变量类型与变量名称两个属性,而变量类型又包括非数组变量类型和数组变量类型
非数组变量类型
int,short,float,double,char,结构体,联合体等
数组变量类型
多个同样的变量组成的一维构造类型
包含元素个数和元素的变量类型两个属性
如int[2],char[3]
数组变量类型的元素也可以为其他数组变量类型
如int[2][3]的每个元素都是int[3]类型
指针变量类型
指针变量类型其实也是非数组变量类型
任意一种变量类型,都有指向其的指针变量类型
这里要区分一下
int(*)[2]是一个指针变量类型,指向一个int[2]类型
int*[2]是一个数组变量类型,其每个元素是int*指针变量类型
Tip: 把int*作为一个整体来看待,这样后面加上[2]就能理解为什么是数组变量类型了
同理,再拓展一下:int*(*)[2]表示一个指针类型,其指向一个数组类型,数组类型的元素类型是指针类型
值
值包含两个层面的语义:值,值的类型
一个值记作<V, V_T> V表示值,V_T表示值类型
内存变量类型 vs 表示值类型
内存变量类型:用于内存分配时确定按什么类型去申请内存
表示值类型:用于外部观察这块内存能看到的值的类型
这里有点绕,对于int等非数组类型类型,这两个定义还没有区别,我们举一个数组的例子来理解
int a[10];
内存变量类型:我们要从内存分配的角度去思考,要为这个数组变量申请空间,所以我们可以得知内存变量类型为数组变量类型,每个元素类型为int
表示值类型:我们外部观察该变量时,想要知道这段内存表示的数据信息,因此V表示内存分配的第一个字节编号,V_T是一个指针类型,为int*
内存六元组模型
Address: 这一段内存的第一个字节的编号
Variable_Type:变量类型
Name:变量名字
Size:占用字节数量
Value:这段内存的表示值
Value_Type:表示值的类型