c++指针初探
业余时间准备重温一下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
到此为止,本篇就此结束,当然指针的用处不只这么些,比如可以用指针来进行动态内存分配等,就不在此啰嗦了。如有不当之处,欢迎批评指正
最新文章
- 修改MySQL默认字符集编码
- 34、JS/AJAX
- js判断浏览器种类以及版本号(从jquery1.8中抠出来的)
- LA 3602 DNA Consensus String
- 代理(Proxy)模式简介
- python学习之copy模块
- [TypeScript] Function Overloads in Typescript
- 今天工作中遇到的根据用户id取得产品大类和相关小类的问题
- hdu1161Eddy&#39;s mistakes
- 在php中使用jquery uploadify进行多图片上传
- Linux 系统裁剪笔记 3
- hexo 建站参考
- c++stack容器介绍
- linux下卸载自带的JDK和安装想要的JDK
- xunsearch 迅搜初探
- Websphere安装配置与项目部署
- SiteMesh的使用--笔记
- Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT
- jackson springboot null节点忽略配置
- VC6.0加载lib文件的三种方法