内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
简而言之两点:1、内存首先被划分成一个个小的内存单元
2、内存单元进行编号
内存单元的编号 - 地址 - 指针
可以讲 指针就是地址 地址就是指针
那么有个问题:一个内存单元的大小是多少呢?答案是一个内存单元的大小是1个字节。
如假设这是一个8G内存,编号为0、1、2、3···每个单元大小为1字节。
下面在讨论一下机器工作时内存空间问题:
如32位机器,其有32根地址线,其中高电平 - 1,低电平 - 0
32为机器可管理2^32个字节空间
比如:00000000000000000000000000000001→32bit - 4字节
同理:64位机器可以管理的空间更多
变量的创建是需要向内存申请空间的,int整型大小位4字节,那么就需要向内存申请4个内存单元(即4字节)来进行‘10’的存储。
那么问题来了,存储一个‘10’需要4个内存单元,每个内存单元都有一个编号(地址),那如果需要知道‘ 10 ’的地址,应该是什么呢。
‘ 10 ’共占用4个字节单元,其中用最小的那一个表示‘ 10 ’的地址。即0x012FF850(地址使用十六进制表示的)
0000 0000 0000 0000 0000 0000 0000 0000
0x 00 00 00 0a 十六进制表示 ‘10’
pa是用来存放a的地址//pa是存放指针的,所以在C语言中pa又叫做指针变量(把地址也叫指针)
int *,其中int是在说明pa指向的a是int类型的、、*说明pa是指针变量
其中*pa是解引用操作符 - 通过pa找到pa指向的a,*pa就是a,由上图可见令*pa = 20,输出为20.
/在32位机器中,指针变量大小是4个字节。指针变量是用来存放指针的,指针就是地址
地址的存储需要多大的空间,指针变量的大小就是几个字节。
32位 - 32bit - 4字节
64位 - 64bit - 8字节