zoukankan      html  css  js  c++  java
  • [C++]指针浅析

    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

    人生就是一局不能Again的DOTA
  • 相关阅读:
    Web APIs
    变量替换
    用shell脚本实现文件、代码同步上线
    20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令
    20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数
    20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统
    20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析
    20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断
    16进制数据拆分
    16进制数据拼接成一个
  • 原文地址:https://www.cnblogs.com/hellenism/p/3504842.html
Copyright © 2011-2022 走看看