假设你自己是个外卖员,有一天你接到一个单子,里面就只告诉你去哪里拿外卖,但是没有写自己的家庭住址,你哪了外卖往哪里送???
1.地址和指针
1.1指针
同样的如果你让计算机帮你改一个数据或者执行某种操作,但是没有告诉计算机这个数据在哪里,计算机就像外卖员一样根本不知道去哪里找这个数据。为了解决这个问题,就引入了指针这个概念,其实指针就是地址,目的就是让计算机直接找到数据在哪里,好比你告诉外卖员你家在某某小区602号房间,这样外卖员就可以很快的找到你,计算机同样可以高效对数据查找。
1.2内存
那么问题来了:
地址在计算机里面怎么产生的呢?
电脑有64位32位,这个32位代表的就是32跟地址线,地址线根电线差不多,只不过很细小,它可以产生正电或负点,或者是高低电位,亦或者是脉冲的有无。就这样的两种状态的转变,产生了我们熟知的二进制代码。32根地址线产生了32种 0 1 组合,根据高中的排列组合知识,总共有2^32组合,也就是有这些个地址。
我们将这一个个的二进制数称作一个比特位(学生),每个每个内存单元(宿舍)有8个比特位。把八个比特位叫做一个字节。这样2^32个内存单元就是2^32字节。这就是内存。
介绍一下内存单位的转换:
1TB=1024GB;
1GB=1024MB;
1MB=1024KB;
1KB=1024Byte;
1Byte=8Bit;
这样三十二位机器的内存大小就是4GB
内存单元的编号 == 地址 == 指针
2.指针变量和地址
2.1取地址操作符(&)
变量的创建其实是像操作系统申请一块空间(地址)
有了地址之后计算机怎么到的这个地址呢?:
&操作符可以将一个变量、数组甚至是函数的地址取出来。看上图。
2.2指针变量和解引⽤操作符(*)
2.2.1指针变量
C语言对不同的数据封装了不同的数据类型,同样指针也有对应的类型,便于创建指针变量。

2.2.2如何拆解指针类型

是的你答对了指针的类型就是char*,依次类推就可以知道其他指针的类型怎么写了。
2.2.3解引⽤操作符(*)

2.3指针变量的大小


3.指针变量类型的意义
3.1指针的解引用


3.2指针+-整数
依旧先看一段代码
3.3void* 指针


4.指针运算
指针运算共有三种:
指针加减整数;
指针加减指针;
指针的的关系运算;
4.1指针+-整数
不管是一维数组还是二维数组,他元素的地址都是连续排放,因此有了首元素的地址就可以顺藤摸瓜的找到其他元素。
4.2指针 +- 指针
指针减指针的结果的绝对值是两个指针之间元素的个数,这里有几个注意事项:
1.这个两个指针必须是连续的,否则你也不知道这两个位置的元素个数的意义是什么
2.这个两个指针的类型必须是相同的,因为类型决定的步长,不相同的两个指针类型,不法确定多长是一个元素
下面是指针-指针的用例 my_strlen的实现
4.3指针的关系运算

