我们在之前的介绍中融入了不少关于指针的知识点,因此现在对于指针已经有一定的了解了,首先我们来介绍一下什么是指针:要想了解指针我们首先要了解内存,32位的机器有32根线来管理内存,每根线在寻址的时候产生高电压和低电压,也就是一共2的32次方种不同的地址,一个地址管理一个内存单元,一个内存单元有一字节,也就是32位的机器可以管理4gb的内存空间,64位的机器可以管理8gb的内存空间。那么了解这些之后我们就可以想,能不能通过将内存取出来,以此来找到地址?答案是可以的,我们用&操作符来讲变量的地址取出,然后用什么来接收呢?指针变量此时诞生了,用它来接收地址,再使用解引用操作符来通过地址找到变量。
指针运算有三种:1、指针+-整数;2、指针-指针(前提是两个指针必须同时指向同一片空间),得到的是两指针间的元素个数;3、指针大小的比较。
指针与数组:两者是两个完全不同的东西,但是两者间有一个联系,数组名就是数组首元素的地址,这建立了两者间的联系,可以通过地址来访问数组,其实编译器会自动将arr[i]转化为*(arr+i)来计算,这样的表达式才能计算。
稍微进阶一点的二级指针:int a=10;int *pa=&a;int* *ppa=&pa; pa可以理解为一级指针,里面的*表示pa是一个指针,指向的是int类型的内容,同理,二级指针中第二个*表示ppa是一个指针,指向的是一个int*类型的变量。二级指针解引用得到的是一级指针的内容,也就是a的地址,**ppa==a,两者完全等价。
指针数组:这是一个数组,里面存放的是地址,我们可以用指针数组来管理多个一维数组,以此来模拟一个二维数组的效果。(效果基本按相同)