由于一些原因,我需要回顾一下编程入门语言——C语言,我对于C一直是“犹抱琵琶半遮面”的朦胧美,也可以说是:“** 可远观而不可亵玩焉!”,即便是毕业工作n年的我,依旧是都难以一窥C之芳容。今天我就再来重温一下C的精华——指针**。
指针
官方称指针是一种保存变量地址的变量,怎么来理解这句话呢?我们都从图书馆结果图书,就以此为例来探讨一下指针的来龙去脉。
我们都知道,图书都在图书馆的书架上,且每本书都有对应的编码,这里我们可以将编码理解为每本书所在的地址(位置)。我们可以通过书的地址去查找书,反之也可以利用书名来找到该书所在的地址。这就很类似于我们所声明的变量x,变量x也是要存起来的,它存储于计算机的内存中,对应的内存也有相应的内存地址编号。存储该内存地址编号的变量就称为指向x的指针。
如果不好理解,可以知乎上关于指针的讲解,大家可以借鉴一下;
#include<stdio.h>
main()
{
int num = 100;//声明一个int型变量num
int* num_pointer = NULL; //声明一个int型的指针(变量)
num_pointer = #//将num的内存地址赋值给num_pointer,这时num_pointer就是指向num的指针
printf("变量num的内存地址,也即指向num的指针的值为%0x\n",num_pointer); // 62FE44
printf("通过指向num的指针num_pointer来获取num的值:%d\n",*num_pointer);//100
}
再次说明一下:
- 一元运算符&用于取一个对象的内存地址;
- 一元运算符** * **是间接寻址或者间接引用运算符,当它作用于指针时,将获取到该指针所指向的对象;
- & 和 * 的优先级比算术运算符的优先级高;
- 声明指针变量时,最好将与类型写在一起,这样更便于理解和查看,如 int pointer ;
- 指针也是变量;