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
到此为止,本篇就此结束,当然指针的用处不只这么些,比如可以用指针来进行动态内存分配等,就不在此啰嗦了。如有不当之处,欢迎批评指正
c++指针初探的更多相关文章
- C++ | 智能指针初探
智能指针初探 在 c/c++ 语言中有一种特殊的类型--指针类型. 指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量.它可以直接对内存地址中的数据进行操作,是一种非常灵活的变量.指针被誉为 ...
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- 你必须知道的指针基础-7.void指针与函数指针
一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...
- C++ | 再探智能指针(shared_ptr 与 weak_ptr)
上篇博客我们模拟实现了 auto_ptr 智能指针,可我们说 auto_ptr 是一种有缺陷的智能指针,并且在C++11中就已经被摈弃掉了.那么本章我们就来探索 boost库和C++11中的智能指针以 ...
- c语言入门经典(第5版)
文章转载:http://mrcaoyc.blog.163.com/blog/static/23939201520159135915734 文件大小:126MB 文件格式:PDF [点击下载] C ...
- C语言学习书籍推荐《C语言入门经典(第5版)》下载
霍尔顿 (Ivor Horton) (作者), 杨浩 (译者) 下载地址:点我 C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad ...
- C++之面向对象初探----对象管理模型(关键是this指针)
前言 c++对象模型可以概括为以下2部分 1.语言中直接支持面向对象程序员设计部分,主要涉及如构造函数.析构函数.虚函数.继承(单继承.多继承.虚继承).多态等待. 2.对于各种支持的底层实现机制 在 ...
- 动态、指针field-symbols初探
DATA: BEGIN OF STRUC, COMP1 VALUE ', COMP2 VALUE ', COMP3 TYPE STRING VALUE 'bruce king', END OF STR ...
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
随机推荐
- Delphi 正则表达式起步
Delphi 正则表达式起步 在 Delphi 中使用正则表达式, 目前 PerlRegEx 应该是首选, 准备彻底而细致地研究它. 官方网站: http://www.regular-expressi ...
- php内存管理机制、垃圾回收机制
一.内存管理机制 先看一段代码: <?php //内存管理机制 var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存 $a = ...
- 广州亿能自动化测试沙龙 - 自动化测试管理平台设计 [ 沙龙PPT免费下载 ]
广州亿能自动化测试沙龙 - 自动化测试管理平台设计 [ 沙龙PPT免费下载 ] http://automationqa.com/forum.php?mod=viewthread&tid=244 ...
- Unity,基于layer的碰撞配置
可以通过给对象指定layer,实现相同.不同layer之间碰撞的自由配置,比如我们想让怪物之间不碰撞,英雄和怪物之间碰撞,我们就可以这样指定,去掉enemies之间的勾选. 打开方式-edit-> ...
- top下的快捷键
M —根据驻留内存大小进行排序 P —根据CPU使用百分比大小进行排序 T —根据时间/累计时间进行排序 c —切换显示命令名称和完整命令行 t —切换显示进程和CPU信息 m —切换显示内存信息 l ...
- javascript Date对象 之 设置时间
之前对js的date对象总是感觉熟悉,而不愿细细深究其所以然,所以每当自己真正应用起来的时候,总会糊里糊涂的,今日花费2个小时的时间仔细钻研了一下,感觉 豁然开朗,故,以此记录,一来 供以后查阅,二来 ...
- [转]毕设- 深入HBase架构解析(二)
深入HBase架构解析(二) 前言 这是<深入HBase架构解析(一)>的续,不多废话,继续.... HBase读的实现 通过前文的描述,我们知道在HBase写时,相同Cell(RowKe ...
- ASP.NET MVC Bootstrap模板选中菜单高亮显示当前项方法
当我们处理后台显示当前页面,当前页菜单项高亮,我们可以使用js方法,也可用程序实现,使用Bootstrap模板处理高亮并展开方法之一 1.在项目中导入 <script src="/as ...
- C# ---sender
在某个方法中: 第一种写法: private void btn4_Click_1(object sender, RoutedEventArgs e) { btn1_Click(null, null); ...
- UVA 1640 The Counting Problem(按位dp)
题意:给你整数a.b,问你[a,b]间每个数字分解成单个数字后,0.1.2.3.4.5.6.7.8.9,分别有多少个 题解:首先找到[0,b]与[0,a-1]进行区间减法,接着就只是求[0,x] 对于 ...