业余时间准备重温一下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; //0x22fe0c
cout<< "**p2p=="<<**p2p<<endl; //10

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

最新文章

  1. 修改MySQL默认字符集编码
  2. 34、JS/AJAX
  3. js判断浏览器种类以及版本号(从jquery1.8中抠出来的)
  4. LA 3602 DNA Consensus String
  5. 代理(Proxy)模式简介
  6. python学习之copy模块
  7. [TypeScript] Function Overloads in Typescript
  8. 今天工作中遇到的根据用户id取得产品大类和相关小类的问题
  9. hdu1161Eddy&#39;s mistakes
  10. 在php中使用jquery uploadify进行多图片上传
  11. Linux 系统裁剪笔记 3
  12. hexo 建站参考
  13. c++stack容器介绍
  14. linux下卸载自带的JDK和安装想要的JDK
  15. xunsearch 迅搜初探
  16. Websphere安装配置与项目部署
  17. SiteMesh的使用--笔记
  18. Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT
  19. jackson springboot null节点忽略配置
  20. VC6.0加载lib文件的三种方法

热门文章

  1. CSS 之怀疑自己的审美 1 (Day49)
  2. beego——flash数据
  3. 常用restful路由
  4. datagrid 编辑
  5. CSS流体(自适应)布局下宽度分离原则
  6. Sybase:删除表中的某列
  7. EFM32JG系列MCU内部温度传感器使用方法
  8. 蓝屏代码大全 &amp; 蓝屏全攻略
  9. 深入理解Java虚拟机(1)--Java内存区域
  10. 不可忽视的技术趋势:Blockchain