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
到此为止,本篇就此结束,当然指针的用处不只这么些,比如可以用指针来进行动态内存分配等,就不在此啰嗦了。如有不当之处,欢迎批评指正
- C语言指针初探
- C语言指针初探
- 理解C指针:(一)指针初探
- c语言指针初探 一指针运算与多级指针
- c语言指针初探 一 内存管理
- c语言指针初探 一 指针与数组
- c语言指针初探 一指针与引用
- c语言指针初探 一 指针与引用(二)
- C语言指针初探 一 指针与函数
- 初探指针
- 指针初探
- C语言学习笔记(3)指针初探
- 初探二维指针
- 引用和指针初探
- (1)指针初探
- 智能指针初探
- Fortran指针初探
- c++指针初探
- 【hihocoder】字符消除
- Deep Learning(深度学习)学习笔记整理系列之(二)
- 安卓控件属性
- Android实现刮刮卡效果
- Deep Learning(深度学习)学习笔记整理系列之(三)
- c++指针初探
- rtmp协议各字段的理解
- Deep Learning(深度学习)学习笔记整理系列之(四)
- 彻底搞明白find命令的-mtime参数的含义
- 每天学一点Swift----面向对象上(六)
- spring自定义标签使用
- jzoj P1517 背包问题
- css字体和段落、背景
- Deep Learning(深度学习)学习笔记整理系列之(五)