c++指针初探

来源:互联网 发布:淘宝一元换购怎么设置 编辑:程序博客网 时间:2024/06/05 08:22

业余时间准备重温一下c++,因为在阅读Android源码到native层的时候感觉有点吃力,只是在大学时候很不用心的学过c++,所以重温下以便打好一些编程基础知识,本篇就很简单的对c++的指针做初步的总结,算是一个学习笔记。
为了方便说明,本文约定”变量”就是指非指针的普通变量
变量:是编译时分配的有名称的内存。该内存中存储的是具体的“值”,比如int var = 10,那么为变量a分配的内存中存储的值就是10;既然变量是内存,肯定就有内存地址了,怎么获取变量(内存)的地址呢?c++中可以c++中可以用”&”运算符来获取变量的地址(也就是内存的地址):

 int var = 10;//定义一个变量 cout<< "&var=="<< &var <<endl; //获取变量a的内存地址 :0x22fe0c

指针:那么指针是神马?指针其实也是一个变量,只不过这个变量比较特殊它存储的不止”值”本身,而是”值”的地址,或者说指针这个变量存储的是“内存地址”。那么指针从某方面来说其实就等价于 pointer = &var ;也可以说:指针就是&var所代表的内存地址的别名;我们可以通过指针(这个别名)来对变量内存地址进行直接访问和操作

    int *pointer = &var;//定义一个指针,并把a的地址赋值给该指针    cout<< "pointer ="<<pointer <<endl; //0x22fe0c

那么指针和变量的关系图可以简单用下图表示:
这里写图片描述
既然我们可以通过指针pointer来直接操作var的内存,那么肯定可以通过指针拿到该内存中值,可以用*运算符来操作指针获取内存中存储的数值:

    //*pointer来获取内存中的值    cout<< "*pointer=="<<*pointer<<endl; //10

既然变量是编译时分配的内存,且指针也是变量(只不过指针比较特殊),那么指针变量也是编译时分配的内存,同理我们也可以通过&pointer来获取指针的内存地址!

   //指针的内存地址    cout<< "&pointer=="<<&pointer<<endl; //0x22fe00

同理,我们也可以给指针的内存地址起一个别名:这就是“指针的指针”了

    int  **p2p = &pointer;//定义指针的指针    cout<< "p2p =="<<p2p <<endl; //0x22fe00

“指针的指针” 和 “指针”的关系也可以仿照上图来表示:
这里写图片描述
类似于如何通过指针来获取var的值,那么通过指针的指针也是可以获取到var的值得:
1)首先对指针的指针p2p通过*运算符获取到p2p的值,即pointer的值:即 *p2p = 0x22fe0c (pointer的值也就是var的地址值);
即*p2p ==pointer ==&var
2)继续对p2p进行运算,获取指针pointer得值,即:**p2p = *pointer = 10

cout<< "*p2p=="<<*p2p<<endl; //0x22fe0ccout<< "**p2p=="<<**p2p<<endl; //10

到此为止,本篇就此结束,当然指针的用处不只这么些,比如可以用指针来进行动态内存分配等,就不在此啰嗦了。如有不当之处,欢迎批评指正

原创粉丝点击