指针
以前学习c++的时候就一直对指针这个东西模糊不清,总以为存的是数值,今天恒哥专门来讲了一下指针,下面我谈一下对指针的理解
先说下变量
因为指针指的都是变量,每一个变量空间在被创建时都会被随机分配地址,就是普通变量存的是常量池的地址,这就是为什么直接在代码中用物理地址去访问空间中数据的话,有可能是访问不到的,其实变量的地址就是指针,不过普通变量的指针指的是内存单元(内容),指针变量指的就是内容中所指向的地址。
指针是编程语言中的一个对象,利用地址,通过地址能找到所需的变量单元,意思就是可以通过它能找到以它为地址的内存单元,听起来挺绕口 例如 int a=1;int *b;b=&a
此时&a就代表a的地址 *b就可以看成找a的内存单元1所对应的地址,在普通变量中存的数字在常量池里面有对应的地址。
打个比方来说把每个内存单元比作一个房间,那么他们的地址就是一个门牌号,指针变量中保存的就是其他变量的地址,其实就是指针变量这个房间中存放的是其他房间的门牌号
注
【*后面跟的必须是变量指针的地址,例 *a就会报错 但是 *&a就是等于a】
【 指针不能越层**只能指向 *】
下面是示例代码
#include<stdio.h>
void main(){
int a=1;//创建一个普通变量a 存1
int b=2;//创建一个普通变量b 存2
int *c;//创建一个指针变量c 指向b
c=&b;
int **d;//创建一个指针变量c的指针变量d
d=&c;
printf("a的值为=%d\n",a);//打印a的内容 1
printf("b的值为=%d\n",b);//打印b的内容 2
printf("&a的值为=%d\n",&a);//打印a的地址 就是门牌号
printf("*c的值为=%d\n",*c);//读取c中b的地址 等于说是打印b的内容
printf("c的值为=%d\n",c)//打印的是c指向的变量b的地址 等于b的门牌号 因为c的内容是b的地址
printf("d的值为=%d\n",d)//同理打印的是c的地址
printf("*d的值为=%d\n",*d)//打印的是c的内容 b的地址
printf("**d的值为=%d\n",**d)//其实就是打印的是b的内容 2
}
更多的示例都可以用以这个例子进行,万变不离其宗。