C语言疑难杂症-指针
\\\插播一条:文章末尾有惊喜哟~///
进修阶段:高中信竞、大学编程。
前置知识:二进制与十六进制,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位机器理论上最大支持4GB的内存,这就是它渐渐被淘汰的理由。
而64位机器理论上最大支持的内存是
这个量级远大于目前的需求,因此128位机器在相当长的时长内不会出现。
2.2变量与数据类型
C语言有很多数据类型,不同的数据类型在内存中的占用空间和存储格式也不一样。不同数据类型的存储格式比较复杂,这里不详述。我只谈谈不同的占用空间。
一个变量在内存中占用都是不间断空间,记T类型的变量在内存中占用sizeof(T)字节的空间。当我声明一个T类型的变量a时,内存会寻找不间断且可用的sizeof(T)个单元,把它们分配给变量a,假如说是memory[100..103]这4B的空间。此后我对变量a进行读写,也就相当于对memory[100..103]这4B的空间进行读写。
某些数据类型的占用空间:short短整形占用2B,int整形占用4B;float浮点形占用4B,double双浮点型占用8B;char字符型占用1B.
3.指针
指针是一种特殊的数据类型,指针类型的变量应存储的是内存地址。在32位机