|
发表于 2023-10-17 09:50:25
|
显示全部楼层
四川省成都市
首先,来看一张我随手弄的EXCEL表格:
这个表格,第行都有五列,共五行数据。
每个单元格,你可以认为是一段内存空间。
每个单元格都能存放指定的数据,而每个单元格都有一个坐标名称,比如B2的内容是“张三”。按顺序来算,B2位于第7个格子中对吧?那么“陕西省宝鸡市风县”呢?在第20个格子。
到这里,只要不是月㐫歹戋党,或许已经发现,这个格子其实相当于是内存中的一个内存单元,而这个7就是这个格子的编号,俗称“地址”,也就是我们说的“指针”。
我的例子中,每一个格式可以存很长的数据,但内存,每一个指针指向一个内存单元,每个单元只能存一个字节的数据,比如,int型整数怎么办?好办,连续四个内存单元即可,那么,这个int对应的第一个内存单元的地址。所以,也叫“首地址”。
unsigned char txt = 'A';
这时,系统会分配一个字节的空间给变量txt,并写入一个值为65的无符号整数进去。
现在,我们用:
unsigned char *a;
a =&txt;
就可以将txt的指针读出来,读到的是一个整数,这个整数其实就是这个内存的编号,即上述“张三”对应的7。
而我们引用这个地址中的数据,即可读到这个变量中的数据。方法就是:
printf ("%d\n", *a);
1KB有1024字节,那就有0-1023个编号来对应这1024个内存单元,1MB有1024KB=1048576字节,1GB有1024MB=1073741824字节,如果一台电脑有4G的内存,那么,理论上讲,他拥有4294967296个字节,使用0-4294967295来对这些内存单元进行编号。
现在,定义一个变量:
int a =128;
然后,这个变量a被系统分配到第2000,2001,2002,2003这四个内存单元中,因此,这个2000就是变量a的首地址,因为地址是指向一个数据的编号,所以也就形象地使用“指针”来表达地址这一概念。
如果我们取变量a的指针,得到的是2000这个编号,即这个变量的首地址。
如果我们取变量a指针指向的数据,即*a,那么,得到的是2000-2003这连续四个内存单元中存放的数据。 |
|