指针变量学习笔记

指针变量学习笔记

是什么

指针变量是一种变量类型(好像是废话)(但是个人认为这句话特别重要)

指针变量的值:某一内存地址的编号(这个内存地址上存有一个变量,就说这个指针指向这个变量;如果这个内存地址上没有存任何东西,就说这个指针是空指针)

或许用一种类比的方法更容易理解:

你面前有五个袋子,从左到右依次排列,分别编号一二三四五;

定义一个int变量int a=9,假设存放在第三个袋子中。好,现在打开第三个袋子,你看到 “9”这个数字。

定义一个指针变量p,指向a,假设指针p存放在第二个袋子中。好,现在打开第二个袋子,你看到的是 “第三个袋子” 这样一行字。

怎么用

声明

例如:声明一个指针p,这个指针p指向一个int类型的变量a,代码如下:

1
2
int a = 12345;   //随便想的一个数,没啥特殊意思
int *p = &a;

解释一下:int *p 里面int *是变量类型,表示 “一个指向int类型变量的指针” ,p 是变量名,&a 中&是 “取址符号” ,&a表示a的内存地址。

上面第二行代码意思就是:声明一个变量 p ,类型是指向int变量的指针,同时给这个变量赋值,值是一串内存地址,这个内存地址上存放着一个int变量a。

或许第二行写成如下形式更容易理解:

1
2
int *p;   //定义一个指针变量,变量名为p
p = &a; //p的值是a所在的内存地址

按照上面的类比,&a就是“第三个袋子”这样一行字,p=&a就是将这个地址名赋给了p

取值

用到取值符号*

p是这个指针变量的变量名,加上* 变成 *p 意思就是 “p所指地址上的变量的值”

按照上面的类比,p就是”第三个袋子“这一行字,*p就是“第三个袋子里面的值”,也就是说 *p == a是成立的。