在解释指针之前,让我们了解一下:
位/字节位是计算机处理的最小单元,可以为0或1。字节= 8位(例如1011 0110)。
Word您的硬件能够处理的大小。不久前,我们曾经拥有32位(4字节)系统,现在64位(8字节)系统占主导地位。
RAMRAM是一种存储类型,它具有一定的容量,该容量受一个单词的位数限制。可以由该字长表示的最大数字,即(例如32位字的32个连续位)。
对于32位系统,上限为2 ^ 32 = 4,294,967,296(4 GB),而对于64位系统,上限为2 ^ 64 = 2 ^ 32 * 2 ^ 32 = 18,446,744,073,709,551,616(4 GB * 4 GB) 。
使用可用的存储器,您可以分配一个位置来存储数据,可以分配的最小位置是一个字节,因此地址以0x00000000开头,并以一个字节的倍数递增,一直到上限。例如,在32位系统中,您可以分配从0x00000000到0xFFFFFFFF的地址。
变量每当在C中声明变量时,该变量将具有4个属性:-地址(在RAM中的某个位置,例如0x1F301000)-类型(字符串-1个字节,整数-一个字长等)-值(包含在其中的数据RAM从地址开始,直到字节为止,具体取决于其类型)-标签(只是一个名称,以便您可以访问地址或值)
指针,最后!指针是变量!从它们具有地址,类型(指针),值和标签的意义上讲,它们与任何其他变量都没有不同。
指针的目的是指向变量,因此指针变量的值是变量的地址。指针具有地址(例如0x31E0F825),类型(指针),值(例如0x1F301000)和标签(例如ptr1)。
在C / C ++中的编译时声明变量时,您已经有足够的关于该变量的信息。地址被分配,类型,标签和值被分配。
想象一下,您想将一个声明的变量传递给一个函数,并且想要对该函数进行控制,就像您想让它重写一样。你该怎么做?您需要传递变量在内存中的位置以便可以对其进行操作,这就是为什么要通过引用(例如&x)传递变量的原因,这就是为什么传递给函数的地址会将其视为指针。
现在考虑动态分配内存存储(malloc),该存储是在运行时分配的,这意味着在程序运行后的某个时刻,将连同其地址一起分配存储。您将在哪里住那个地址?在指针中。
领取专属 10元无门槛券
私享最新 技术干货