目录
一、什么是内存
二、指针
三、指针大小
一、什么是内存
要想学好指针,就要明白什么是内存。
内存是计算机中最重要的存储器,计算机中一切程序的运行前都要加载在内存中。
如上图所示,这便是冯诺依曼计算机的基本原理
先是输入数据,进入内存,在经过CPU运算与处理,然后在屏幕上显示出来。
那么我们先从计算机中数据表示开始。
计算机中所以的信息都是以二进制的形式表示,即 0 和 1 。1 个二进制位的数据传输是以“位”(bit)为单位,一个位就代表一个二进制位,即 0 或 1 。每 8 位二进制数组成一个字节(Byte),即1 Byte = 8bit。还有KB,MB,GB,TB等储存单位,1KB=1024Byte,1MB=1024GB,1GB=1024TB....
而计算机中内存划分为多个小单元格,一个单元格为一个内存单元。
如下所示:
在计算机中一个内存单元的大小为一个字节,即1Byte。
下面,我们以32位系统为例,计算内存大小。
32位系统中有32根地址线,即有32根物理线(电线),将这32根线进行通电,就会产生正负电之分,即1表示为正,0表示为负。将电信号转换成数字信号,就能产生由0和1组成的32位二进制序列,一共有2的32次方大小的寻址空间。
由于1个内存单元为一个字节,32位系统的内存为4GB,
二、指针
为了有效访问每个地址,我们就将每个内存单元进行编号,这些编号就被称为内存单元地址
所以编号就是内存单元的地址,即指针就是地址。
变量是创建在内存中的,而每个内存单元都有一个地址,所以每个变量都有一个地址
取出变量地址如下所示:
#includeint main() { int a = 0; &a;//取出变量a的地址 printf("%pn", &a);//%p 是以地址的形式打印 return 0; }
那么地址又是怎么存储,怎么定义指针变量
#includeint main() { int a = 10; int * pa = &a;//pa是用来存放地址的,即pa 是指针变量。*说明pa 是指针变量 return 0; }
下面我们有一个实例,来解释指针变量
#includeint main() { int a = 10; int * pa = &a;//pa是用来存放地址的,即pa 是指针变量。*说明pa 是指针变量 * pa = 20;//*是解引用操作符,*pa就是通过pa中存放的地址,找到pa指向的地址 printf("%dn", a); return 0; }
三、指针大小
指针变量就是用来存放地址的,指针需要多大的空间,取决于地址的存储需要多大的空间
32位----32bit----4Byte
64位----64bit----8Byte
可以理解为指针大小跟地址线的多少有关,而地址线又跟32位或64位系统有关
即指针大小在32位系统中是 4个字节,在64位系统中是 8个字节。
这是32位系统的指针大小
#includeint main() { printf("%dn", sizeof(char*)); printf("%dn", sizeof(int*)); printf("%dn", sizeof(short*)); printf("%dn", sizeof(long*)); printf("%dn", sizeof(long long*)); printf("%dn", sizeof(float*)); printf("%dn", sizeof(double*)); return 0; }
若64位系统,则指针大小为:
由此可知,指针的大小不取决于类型,而取决于系统位数



