首先我们需要大概明白指针是什么样子的,指针的作用,在C语言中扮演什么样的角色
现在想象这样一个场景,加入有一个宿舍楼,楼内有1000个房间,但没有宿舍号,你朋友来你宿舍玩,要怎么找到你,只能通过挨个房间巧妙问直到找到你所在的房间为止。这样可能就要花上几个小时才能找到你,但如果我们将每个宿舍设置一个寝室号码牌,是不是就能准确的锁定要去往的寝室。
一楼:101、102、103...
二楼:201、202、203...
三楼:301、302、303...
...
在现实生活中我们能通过房间号快速的找到目标,那在编程中我们同样也能通过指针快速的找到目标,提升我们的效率。
计算机有许多硬件,就像人体有很多器官。器官和器官之间是通过神经和血管连接的,计算机也一样是通过很多线来连接的,这些线让硬件之间协调运作。
了解了内存与地址的关系,我们再回到C语言中来,C语言中创建变量其实就是向内存申请空间
这边我们创建一个整数变量,代码谁都能写出来吧
int num = 5;
这四个内存空间组成了一个数字,但当我想访问num的时候,你不能给我四个地址吧,这四个地址到底哪个代表着num呢?
int main()
{
int num = 5;
printf("%p", &num);//%p用于打印指针,&是取地址操作符用于提取地址
return 0;
}
打印结果:
Ox006FFD70
会取最小的,也就是起始地址。
指针变量
那么我们现在可以取出一个地址,有没有办法存放一个地址呢?
pn = &num//创建一个叫pn的变量,然后把num的地址放进去
那我们怎么写pn的类型呢?
//pn就被称为指针变量,指针变量顾名思义就是用于存放指针的变量
int* pn = #
了解了指针类型,而且我们现在已知pn中存放的是num的地址,那怎么通过pn找到num呢?
思考,指针变量的本质也是一个变量,在我们创建指针变量的时候内存是不是也要为它开辟一块空间,那这块空间有多大呢?
换句话问就是指针变量存放的是指针,地址的存放需要多大空间?
所以32位机器(x86)一个地址的大小是4个字节
64位机器(x64)一个地址的大小是8个字节
讲到这我们也稍微补充点知识点吧
在这我们对指针也有了大概的概念,但想完全掌握好指针,这才是刚刚开始
指针是一个知识点非常多也非常密集的难点,Mr.狠人不想将这么多东西一股脑的全堆一起塞给大家,我认为大家最好还是循序渐进,按自身的理解状态来学习。理解的好就继续学习,不怎么理解就先吃透当前的知识。