总述
一 前提知识
静态存储区,动态存储区 。 不同变量会保存在不同的存储区里。
1.有些变量的内存实在编译的时候分配的,有些变量的内存是在程序运行是分配的。不管怎么说变量都是会占用一些内存空间的。
二、地址概念
传统生活中,表示地址可以用文字表述:
xx市xx区xx路xx号;是人类能看懂的文字,确实代表一个地址,如果按文字去找是可以找到实际地址的。
计算机中的地址和人类社会中讲究的地址是一个意思。
计算机中用一个数字描述一个地址。如1000(十进制);但是计算机更习惯用16进制表示一个地址 0x3E8;要是到内存中去找1000这个数字所代表的地址,真可以找到。
总结:地址在计算机中就是一个数字,代表一个内存位置。
//严格区分地址和地址内容。
int i=5 ,j=6;//int占4个字节系统内部会存着一张表
1000 – i
1004 – j
直接访问 间接访问
按变量地址存取变量值,这个叫直接访问;
将变量i的地址,存放在另一个内存单元中。
//在c语言中,我们一般定义int char float 这些变量,用来存值。
//c语言中我们也可以定义一种特殊的变量,这种特殊的变量不是用来存值,而是保存地址。
假设定义一个变量mypoint存放整型变量的地址,
mypoint =&i;//把变量i的地址保存到了mypoint中
//理解成mypoint指向了i,这里所谓指向,就是通过地址体现的。
但是mypoint这种特殊变量在内存中也是有地址的,所以他也是占内存的。这种特殊变量mypoint 一般占4个字节内存。如果现在要存取i的值。我们就有了一种间接的访问手段
1.先找到存放i的地址的内存位置,(3000-3003),也就是mypoint指针变量的内存的地址,取出i的地址(1000)。
因为,mypoint保存的是int i 的地址,int 占4个字节 ,表示1000开始的4个字节是一个整型数据,从1000开始取得4个字节数据,也就是5;这就是i的值。确定一个概念
指针变量:如果一个变量,比如mypoint,专门用来存放另外一个变量的地址则称这个变量为指针变量;mypoint就是个指针变量。
指针变量中的值是个地址,也叫指针。所以区别好指针变量和地址/指针两个概念。指针就是个地址。
指针变量:是存放其他变量地址的变量,也叫指针指向某某变量。