zoukankan      html  css  js  c++  java
  • C++ Prime:指针

      指针与引用的区别:1、指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象;其二:指针无需在定义时赋值。指针在块作用域内定义如果没有被初始化,也将拥有一个不确定的值。

      

    空指针:

      得到空指针最直接的办法就是用字面值nullptr来初始化指针,这是C+ 11新标准刚刚引入的一种方法。nullptr是一种特殊类型的字面值,可以被转换成任意其他的指针类型。另外一种方法就是通过指针初始化为字面值0来生成空指针。

      有时候还会用到一个名为NULL的预处理变量来给指针赋值,这个变量在头文件cstdlib中定义,它的值就是0.

    void* 指针:

      void* 是一种特殊的指针类型,可以用于存放任意对象的地址。一个void* 指针存放着一个地址,这一点和其他指针类似。不同的是,我们对该地址中到底是个什么类型的对象并不了解:

    double obj = 3.14, *pd = &obj;
    void *pv = &obj;    // void*能存放任意类型对象的地址,obj可以是任意类型的对象
    pv = pd;    // pv可以存放任意类型的指针

      利用void*指针能做的事也比较有限:拿它和其他的指针比较、作为函数的输入或输出,或者赋给另外一个void*指针。不能直接操作void*指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就不能确定能在这个对象上做哪些操作。

    指向指针的引用:

      引用本身不是一个对象,因此不能定义指向引用的指针,但指针是对象,所以存在对指针的引用:

    int i = 42;
    int *p;    // p是一个int指针
    int *&r = p;    // r是一个对指针p的引用
    
    r = &i;    // r引用了一个指针,因此给r赋值&i就是令p指向i
    *r = 0;    // 解引用r得到i,也就是p指向的对象,将i的值改为0

      要理解r的类型到底是什么,最简单的就是从右到左阅读r的定义。离变量名最近的符号对变量的类型有最直接的影响,因此r是一个引用。声明符的其余部分用以确定r引用的类型是什么,此例中的符号*说明r引用的是一个指针。最后声明的基本数据类型部分指出r引用的是一个int的指针。

  • 相关阅读:
    MFC开发编程规范(二)
    Mysql日期和时间函数大全(转)
    php获取客户端IP地址的几种方法
    postgres 查看数据表和索引的大小
    PHP应用memcache函数详解
    css自动截取文字 兼容IE firefox Opera
    JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
    Zend_Auth与Zend_Acl访问控制链
    去除所有js,html,css代码问题
    [转]那些相见恨晚的 JavaScript 技巧
  • 原文地址:https://www.cnblogs.com/vitah/p/4321689.html
Copyright © 2011-2022 走看看