指针概念、指针解引用及指针运算
1.首先,区别三个概念:指针,指针变量,变量指针。
什么是指针?
指针就是地址。
什么是指针变量?
如int *p,p就是指针变量,指针变量里将所有内容视为地址。
什么是变量指针?
变量指针就是变量的地址。
2.对于32位机器,假设有32根地址线,那么假设每根地址线在寻址的是产生一个电信号(0或1),那么32根地址线会产生2的32次方个地址。每个地址标识一个字节,就有4G的空间进行编址。
在32位机器,地址是32个0或1组成二进制序号,所以指针变量的大小是4个字节。
在64位机器,指针变量的大小是8个字节。
3.指针类型:
char *p1=NULL; char *类型的指针存放char 类型变量的地址
int *p2=NULL; int *类型的指针 存放int 类型变量的地址
double *p3=NULL; double类型的指针存放double类型变量的地址
所以,指针的类型是type(int) +*
4.指针+(-)整数:
指针加1加的是所指类型的大小。
p+n--->p+n*type
5.指针的解引用
指针类型是int *,解引用(&取最小位地址)
指针类型是char *,解引用
指针类型决定了对指针解引用能操作几个字节。如char *的指针解引用只能访问一个字节(最小位),int *的指针解引用可以访问4个字节。
6.指针-指针
请看如下代码:
但是如果是指针类型是char *或者short *呢,结果会变吗.....请看如下代码:
有如下解释:
由此可知:在同一数组,指针相减结果是两指针经历元素个数,但是经历元素个数与指针类型有关。
7.指针的关系运算:
首先请看指向数组元素的指针与数组最指向一个元素后面内存位置的指针进行比较:
然后请看指向数组元素的指针与数组最指向第一个元素前面内存位置的指针进行比较:
两种比较方法都可以完成任务,但是根据标准规定:允许指向数组元素的指针与数组最指向一个元素后面内存位置的指针进行比较,不允许指向数组元素的指针与数组最指向第一个元素前面内存位置的指针进行比较,所以第二种方法一般要避免使用。
如上是我对指针的概念,指针解引用,指针运算的总结,如有不足之处,还请各位大牛多多提点。
如果对指针有更深的兴趣,请关注我的后续博客,谢谢支持。