前言
大家好啊!又是我这个快乐跑路人,扫雷的展开没有多少东西我就把之前的扫雷更新了一下把展开放到哪里了,今天我们来弄一下指针(指针作为c语言中最重要的一部分自然不能一下子弄完,所以我分为初始指针和详解指针。)
——————————————————————————————————————————————————————
(快乐分割线(^ ▽ ^))
内存略述
讲指针之前还是要先略讲一下内存.
首先为了方便查找我们把内存分为一个个的内存单元.
内存地址又被编上一个个号(一般以十六进制呈现).
内存编号就被称为地址一个地址占一个字节.
内存单元的编号由地址线(物理的电线)的通电产生.
一、啥是指针?
1.指针是内存单元中最小的编号,也就是地址。
2.平时口语说的指针一般是指针变量是用来存放地址的变量。
我们通过一个十分简单的代码来观察一下内存的原理:
内存
int main(void) { int a = 0; int* p = &a; return 0; }
最上面的地址是a的地址我们可以通过&a来得到作为int 类型的a变量他的地址却知识所占四个内存单元的开头的一个所以我们就称每个变量开头的内存单元为地址
p得到的也只是开头的内存单位
p作为指针在32位计算机的大小为4字节
在64位计算机中8个字节的大小
因为
32位机器上每个地址是32个0或1也就是32个比特位一个字节是8个比特位所以我们要储存32个比特位就需要4个字节大小
同理
64位机器就需要8个字节大小的指针来存放地址。
二、指针和指针类型(指针类型的重要性)
2-1指针加减整数
此例子只是为了证明不同类型的指针有着不同的意义。
在32位机器下所有的指针都有这相同的4个字节大小(64位机器则有8个字节大小)
但是他们所控制的字节大小不同
如图:
我们用char类型的指针来控制int类型的变量就没有按照我们心里所想的那样来执行本应该打印2的最后却打印了怪怪的数字而我们用相同类型的指针来控制就没发生上述怪事。我们来用内存来解释此事。
上图:
开始时我们将a设成了44332211
经历了char类型指针的操作我们发现我内存里的a内容就只有一个字节的内容发生了改变可是我们int变量有四个字节的空间啊,所以就发生产生了那个奇奇怪怪?的数字。而我们使用int类型的指针进行操作又会发生什么呢?
上图!!!
诶!这一下我们四个字节的内容都发生了改变,这样我们的int a就可以被安排明白了
而在不同类型指针加整数的时候地址的变化也是不同的
所以指针类型相对应十分的重要。
从上面的例子可以看出指针类型对应的必要性。
小结: 指针类型决定了在解引用的时候能一次访问几个字节的能力