业余时间准备重温一下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++指针初探的更多相关文章

  1. C++ | 智能指针初探

    智能指针初探 在 c/c++ 语言中有一种特殊的类型--指针类型. 指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量.它可以直接对内存地址中的数据进行操作,是一种非常灵活的变量.指针被誉为 ...

  2. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  3. 你必须知道的指针基础-7.void指针与函数指针

    一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...

  4. C++ | 再探智能指针(shared_ptr 与 weak_ptr)

    上篇博客我们模拟实现了 auto_ptr 智能指针,可我们说 auto_ptr 是一种有缺陷的智能指针,并且在C++11中就已经被摈弃掉了.那么本章我们就来探索 boost库和C++11中的智能指针以 ...

  5. c语言入门经典(第5版)

    文章转载:http://mrcaoyc.blog.163.com/blog/static/23939201520159135915734 文件大小:126MB 文件格式:PDF    [点击下载] C ...

  6. C语言学习书籍推荐《C语言入门经典(第5版)》下载

    霍尔顿 (Ivor Horton) (作者), 杨浩 (译者) 下载地址:点我 C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad ...

  7. C++之面向对象初探----对象管理模型(关键是this指针)

    前言 c++对象模型可以概括为以下2部分 1.语言中直接支持面向对象程序员设计部分,主要涉及如构造函数.析构函数.虚函数.继承(单继承.多继承.虚继承).多态等待. 2.对于各种支持的底层实现机制 在 ...

  8. 动态、指针field-symbols初探

    DATA: BEGIN OF STRUC, COMP1 VALUE ', COMP2 VALUE ', COMP3 TYPE STRING VALUE 'bruce king', END OF STR ...

  9. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...

随机推荐

  1. POJ 1733 Parity game (带权并查集)

    题意:有序列A[1..N],其元素值为0或1.有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息.求最多满足前多少条信息. 分析:区间统计的带权并查集,只是本题中路径 ...

  2. sublime Text emmet插件使用手册

    转自:http://www.w3cplus.com/tools/emmet-cheat-sheet.html 介绍 Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个工 ...

  3. 纯CSS3实现GIF图片动画效果

    在线演示 本地下载

  4. 防盗链&CSRF&API接口幂等性设计

    防盗链技术 CSRF(模拟请求) 分析防止伪造Token请求攻击 互联网API接口幂等性设计 忘记密码漏洞分析 1.Http请求防盗链 什么是防盗链 比如A网站有一张图片,被B网站直接通过img标签属 ...

  5. hadoop 2.7.3 源码编译教程

    1.工具准备,最靠谱的是hadoop说明文档里要求具备的那些工具. 到hadoop官网,点击source下载hadoop-2.7.3-src.tar.gz. 解压之 tar -zxvf hadoop- ...

  6. struts2自定义Interceptor拦截器

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 文件与IO-字节输入/输出

    package IoDemo; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce ...

  8. Gamma函数相关matlab代码

    1.Gamma函数: Gamma函数matlab代码: x=:0.5:5syms t y=)*exp(-t),,inf) y=double(y) plot(x,y,) 图像如下: 2.lgΓ(x)函数 ...

  9. NumPy数组创建例程

    NumPy - 数组创建例程 新的ndarray对象可以通过任何下列数组创建例程或使用低级ndarray构造函数构造. numpy.empty 它创建指定形状和dtype的未初始化数组. 它使用以下构 ...

  10. NumPy排序、搜索和计数函数

    NumPy - 排序.搜索和计数函数 NumPy中提供了各种排序相关功能. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种 ...