为啥要有指针?
正如宿舍楼的每间房间都有门牌号,指针就相当于内存里每个小空间的门牌号,有了它我们可以清楚地管理内存空间。
内存这栋宿舍楼被划分为了一间间的内存单元,每间内存单元的大小是1个字节。我们给每间内存单元编号,形成他们的地址,在C语言中给他叫做指针。
所以说指针的存在是为了让我们更好地管理内存。在C语言中,指针就是地址,地址就是指针。
指针=地址=内存单元的编号
如何拿到指针?
&+变量名
例如:
int a=20; int* pa=&a;
这里pa是一个用来存放地址/指针的变量,叫做指针变量。
&a拿到的变量a的首地址(显示为一个16进制的数值)
逆操作:解引用指针
通过地址/指针,操作内存空间里存的东西
例如:
int a=20; int* pa=&a; *pa=200;
这里我们通过变量a的地址来改变了a存的数值
指针变量的大小:
×86环境下(32位平台)--指针占4字节(32个bit位)
×64环境下(64位平台)--指针占8字节(64个bit位)
不同的指针类型:
前面提到指针的大小是确定不变的,那么不同的类型会对指针产生什么影响呢?
影响的是:
对于不同类型的指针,在解引用指针操作的时候,我们可以访问的权限是不同的。
例如:对于int指针,解引用后可以访问4个字节;而char类型的指针,解引用后只可以访问1个字节。
指针+/-1:
int* pa: pa+1 相当于 +1×sizeof(int)
char* pa: pa+1 相当于 +1×sizeof(char)
void*无具体类型的指针:
可以用来接收任意类型的指针,不用管不同的类型;
BUT他不可以进行解引用操作,不能进行+1操作,非常有限。
