zoukankan      html  css  js  c++  java
  • 【C++自我精讲】基础系列一 指针与引用

    【C++自我精讲】基础系列一 指针与引用
     
    一 前言
     

    指针、引用、指针与引用区别。

    二 指针
     

    变量:代码中常常通过定义变量来申请并命名存储空间,并通过变量的名字来使用这段存储空间。

    //变量
    int nNum;    //声明名字为nNum的int型存储空间
    nNum = 100;  //nNum存储值100
    nNum = 200;  //改变nNum存储值200

     指针:又叫一级指针,用来指示一个内存地址的变量。对于一个类型T(int、char、folat...),T*就是指向T的指针类型,一个T*类型的变量保存了一个T对象的地址。

    //指针
    int *pNum;   //定义指针pNum
    pNum = &nNum;//pNum指向变量nNum在内存中的地址,而不是变量本身的值200(取地址运算符&:取变量的地址。如:&nNum为取变量nNum的地址)
    int nNum1 = *pNum; //取指针pNum指向存储空间值200(指针运算符*:从地址中取数据。如:*pNum为从地址pNum中取值)

     指针变量:指针是地址,指针变量是存放地址的变量。

    //指针变量
    int *pVar = pNum;//等同int *pVar = &nNum;

    二级指针:指向指针变量的指针。

    //二级指针
    int **ppNum = pVar;//

     用一张图表示下二级指针:

     

    C是常量;B是一级指针,B的值(即C的地址)是一级指针数据;A是二级指针,A的值(即B的地址)是二级指针数据。

    空指针:不指向任何对象,指针变量值为NULL。指针为空的判断常常为了避免指针变量的非法使用。

    int *pNum = NULL;
    ...
    if(NULL != pNum)
    {
        ...
    }

     函数指针:是指向函数的指针变量。可用该指针变量调用函数,就如同用指针变量引用其他类型变量一样。

     函数指针声明格式:类型说明符 (*函数名)(参数)  

    //函数min
    int min(int x,int y);
    //函数max
    int max(int x,int y);
    //函数指针
    int (*pFun)(int, int);
    
    //使用函数指针调用函数
    int nNumMin = 1;
    int nNumMax = 100;
    int nMin = 0;
    int nMax = 0;
    pFun = min;
    nMin = (*pFun)(nNumMin,nNumMax);//nMin = 1;
    pFun = max;
    nMax = (*pFun)(nNumMin,nNumMax);//nMax = 100;

    指针函数:函数的返回值类型是一个指针类型,本质是一个函数。

    指针函数声明格式:类型说明符 *函数名(参数)  或 类型说明符 *(函数名(参数))

    int *pfun(int, int);//pfun是一个指向返回值为int的函数的指针
    三 引用
     

    引用:是对象的别名,对引用的操作与对变量的直接操作一样。其主要用于函数参数和返回值类型,T&表示T类型的引用。引用不是数据类型,引用本身不占存储空间。

    int i = 100;
    int &j = i;//&为标识作用,非取地址
    四 指针与引用区别
     

    1)指针可以指向空值,引用不能。如果一个变量指向另一个对象,它可能为空,应该用指针;它不允许为空,应该使用引用。

    2)指针可以改变指向,引用不可以改变指向。引用初始化以后不能被改变,指针可以改变所指的对象。

    3)指针的大小是固定字节(4个字节),引用的大小是所指变量的大小。

  • 相关阅读:
    七周七语言——Prolog(二)
    centos中使用python遇到的几个问题
    use SWF / Flash in cocos2d-x; cocos2d(cocos2d-x) 直接播放flash / SWF文件
    【C++自我精讲】基础系列二 const
    Find发帖水王哥
    JAVA从零单排之前因
    CSharp
    python实战--Http代理服务器
    有道单词-批量导入[只有单词]
    编译原理(一道小证明题)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3165561.html
Copyright © 2011-2022 走看看