Date:

2014-1-4

summary:

指针的简单理解,概念性的东西会比较多(100个人有100种理解,此处只代表我个人看法)

Contents:

1.什么是指针

c++ primer plus中提到,变量是在编译时分配的有名称的内存,而指针只是为了可以通过名称直接访问内存而提供了一个别名。指针的真正用武之地在于:在运行阶段分配未命名的内存以存储值。

2.指针和指针变量

在工作沟通交流中,嘴里一直说得指针,其实是[指针变量]的简称,它是一种数据类型,一种复合的数据类型,使用int*来声明,用于存储内存地址。

所以,在我们平时工作讨论问题时所说的“指针”,通常就是指针变量

3.使用指针

a).特定类型的指针只能指向对应的数据类型(void* 可以指向任何类型)

b).指针一般配合[取地址操作符]和 [解引用操作符]使用

c).指针的size由计算机硬件决定,同一台计算机中,指针的size一致,不会因为它所指向的数据类型不同而不同

d).指针可以做运算操作。

(这里并没有提到New和Delete操作符,因为个人认为它们是内存管理相关,不应在此处谈论,这样Focus的点就在于指针本身与内存管理无关,这样会清晰一点)

Ex:

// a)
//运行时创建了一个int类型的变量(一块内存空间),指针p1帮助我们可以访问这块内存空间的值,这就是指针存在的意义
int* p1 = new int(10);
cout << "运行时创建的数为:" << (*p1) << endl; //因为p1,我们可以访问它指向的内存空间,所以我们可以通过它修改内存空间的值
(*p1)+= 100; cout << "修改新创建的内存空间,它的指为:" << (*p1) << endl;
delete p1;
p1 = nullptr; // b)
double doubleNum = 1.23;
int intNum = 123; p1 = &intNum;
// p1 = &doubleNum; //编译器报错,指针变量类型应该与所指向的变量类型一致
cout << "p1指向的新内存空间的值为:" << (*p1) << endl; // c)
cout << "本台计算机中,使用" << sizeof(p1) << "个字节存储一个指针变量" << endl; // d)
int arrayInt[] = {1,2,3,4,5};
p1 = arrayInt;
cout << "p1指向的空间的指为:" << (*p1) << endl; // 对指针做运算
p1 += 3; cout << "运算操作后,p1指向的空间的指为:"
<< (*p1)
<< "与之前相比,指针向它的连续内存空间移动了3个单元,偏移量为:"
<< sizeof(p1) * 3 << "个字节"
<< endl;

Notes:

nothing

THE END

[C++]指针浅析的更多相关文章

  1. C++ 智能指针浅析

    C++ 智能指针浅析 为了解决 C++ 中内存管理这个老大难问题,C++ 11 中提供了三种可用的智能指针.(早期标准库中还存在一种 auto_ptr,但由于设计上的缺陷,已经被 unique_ptr ...

  2. c++学习笔记—动态内存与智能指针浅析

    我们的程序使用内存包含以下几种: 静态内存用来保存局部static对象.类static数据成员以及定义在任何函数之外的变量,在使用之前分配,在程序结束时销毁. 栈内存用来保存定义在函数内部的非stat ...

  3. 取地址与解引用 C指针浅析

    C语言指针入门需要掌握的两个概念就是取地址&和解引用*,下面我们按例子来理解这两个符号的使用. int main() { int a = 0; int* pa = &a;//取地址操作 ...

  4. C++ 指针与引用 知识点 小结

    [摘要] 指针能够指向变量.数组.字符串.函数.甚至结构体.即指针能够指向不同数据对象.指针问题 包含 常量指针.数组指针.函数指针.this指针.指针传值.指向指针的指针 等. 主要知识点包含:1. ...

  5. 浅析C语言指针问题

    首先明白c语言操作符的优先级及结合性就很容易理解了. 链接 1.关于char *s 及 char s[] char *s指向的是一个字符串对象的指针,可以理解为间接引用,比如 char *s = “1 ...

  6. 浅析指针(pointer)与引用(reference)

    在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void fu ...

  7. 新手学习之浅析一下c/c++中的指针

    一.我们先来回忆一下指针的概念吧,方便下面的介绍 指针是存放地址值的变量或者常量.例如:int a=1;&a就表示指针常量(“&”表示取地址运算符,也即引用).int *b,b表示的是 ...

  8. 浅析C++中的this指针

    转自:http://blog.csdn.net/starlee/article/details/2062586 有下面的一个简单的类: class CNullPointCall { public: s ...

  9. 转:浅析C++中的this指针

    原文出处:http://blog.csdn.net/starlee/article/details/2062586 有下面的一个简单的类: class CNullPointCall { public: ...

随机推荐

  1. C#:总结页面传值几种方法

    小知识点: 1.  W7自带 .NetFrameWork 3.5, 兼容模式为 高版本号兼容低版本号: 2. WF和WPF都是基于XAML的,可是两者的用途不同. WF是一种开发框架,将工作流嵌入在. ...

  2. Juuluu 旗下企业站点管理系统3.0.1公布!

    KgE金刚企业站点管理系统是广州聚龙软件为国内中小企业开发的一款企业站点管理系统,KgE採用可视化的标签模型,可在Dreamvear等网页编辑下可视化编辑,KgE使用javaeemsyqlyuijqu ...

  3. JSP简单练习-使用JDOM创建xml文件

    注意:在编写代码前,请确保该Web文件夹下的"WEB-INF/lib"下包括jdom.jar包! <%@ page language="java" con ...

  4. HTML常用标签属性图

  5. EasyUI - DataGrid 组建 - [ 删除,修改 ]

    效果: html代码: <div style="padding-top: 50px; width: 800px; margin: 0 auto;"> <!--使用 ...

  6. Linux路由器

    Linux路由器 武溪嵌人 钻研嵌入式,改变未来 http://blog.csdn.net/zhang_danf     Linux路由器 http://blog.csdn.net/zhang_dan ...

  7. Java+7入门经典 - 6 扩展类与继承 Part 1/2

    第6章 扩展类与继承 面向对象编程的一个重要特性: 允许基于已定义的类创建新的类; 6.1 使用已有的类 派生 derivation, 派生类 derived class, 直接子类 direct s ...

  8. 一点一滴完全突破KAZE特征检测算法,从各向异性扩散滤波开始(1)

    ECCV2012中出现了一种比SIFT更稳定的特征检测算法KAZE.尽管,这个算法是几个法国人提出的,但是算法却有一个日文的名字.KAZE是日语‘风’的谐音,最近宣布退休的宫崎骏所拍摄的影片“起风了” ...

  9. 【Linux】环境变量设置

    在Windows中环境变量设置是非常easy的事情.例如以下图.仅仅要右键我的电脑->高级系统设置->环境变量,选择Path之后,点击"编辑"就能够输入你要加入的内容. ...

  10. iOS开发技巧 -- 复用代码片段

    如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcod ...