学习阶段:高中信竞、大学编程。
前置知识:二进制与十六进制,C语言基础,数组。
指针初学可能比较难理解,我这篇文章尽量用通俗易懂的方式来讲解。
1. 指针概述
为什么有指针这个东西?因为指针很贴近计算机内部的实际工作原理,与内存实际的寻址方式类似。C语言可以说是高级语言中最贴近机器的语言,而像Python、JavaScript这种更亲和于人类的语言与机器的关系则比较远了,甚至它们本身可能还是用C语言写出来的呢。
指针可以形象地比喻为在内存中定位的导航员。内存那么大,怎么知道我需要的东西存在哪里呢?可以让指针来记录与导航。我们先来了解一下内存。
2. 预备知识
2.1 内存
研究过组装机、电脑配件的话,一定知道内存条这个东西。现在这个时代,一台家用电脑的内存一般是2GB、4GB、8GB、16GB、32GB、64GB等等。
把CPU比作干活的人,则内存就相当于工作台。CPU在跑的程序以及很多相关数据都存在内存内,这就相当于人在干活时要把相关资料放在工作台上使用。
内存可以看成是一个巨大的数组,我这里记为
memory[0..n]
memory
的每一个单元存1B=8bit,memory[0]
就是内存的第一个单元。这个中括号里面的数,即数组下标,被称为内存地址,简称为地址。我确定了一个地址,也就相当于确定了内存中的一个单元。
通常,我们说的32位机器,意思就是地址是32bit的,最大支持的内存是
memory[0x00000000..0xFFFFFFFF]
最小地址是0,最大地址是0xFFFFFFFF=2^32-1,最大支持
也就是说32位机器理论