- 变量的值是在计算机内存中存储的,同时存储变量的内存是有地址的。
- 既然这个地址存在,那么就可以用取址运算符“&”来获取
- 这个地址是有可能并且有必要被记录下来的。即将地址值记录在内存中。这个值是可以用于相关的操作。
- 存储下来的地址的数据类型是指针类型。一般习惯用的标识符是p即英语pointer的首字母。
- 定义的方法是int *p,是指向int类型数据的地址。char *p是指向字符变量的执政。
- 与指针相关的操作:
对于p=&i; 的关系:
&i:是取得i所在的内存地址
*p:是取得p变量里内容(即内存地址)上的值,即p所指向的变量的值。
&p: 也是有意义的操作。
由于p本身也是变量,因此&p可获得指针型变量的所在的内存地址。就是说i的地址储存在&p这个内存地址上。
&* p : 也是系统接受的运算。
解释一下,* p就是i, &*p等同于&i,因此& * p和p是相同的。
运算* &p:也是系统接受的运算。
&p是指p的指针。* &p取得p的指针所指内存的内容,因此*&p就是p。就是i变量在内存中的位置。
总结: * 完成内容的指向功能. & 完成取出内存地址功能。
由于指针也是数据,因此 指针也可以进行计算,相关有意义的运算是C语言所接受的。
指针可以进行++和--的操作。
对于加法可以加上数字,不能指针互相加。
对于减法可以减去数字,也可以指针互相减。
八卦
命令 * p++;在历史上对应于计算机芯片中的一条硬件指令。因此在执行效率上非常高。
加减操作对于相同数据类型的连续内存空间是有意义的。 对于数组和字符串操作特别有效率。
网友评论