• 9、指针、数组和指针算术


    9、指针、数组和指针算术

      指针和数组基本等价的原因在于指针算术和C++内部处理数组方式类似。首先我们来看一看算术,将整数变量加一后,其值增加1;但是指针变量加1后,增加的量等于他指向的类型的字节数,将指向double的指针加1后,如果系统对double使用8个字节存储,则数值将增加8;将指向short的指针加1,如果系统对short使用2个字节存储,则指针 将会增加2.

    2、数组的地址;

      对数组,数组名也不会被解释为其地址,数组名别解释为其第一个元素的地址,而对数组名应用地址运算符是,得到的是整个数组的地址:

    short tell[10];     //tell是一个20bit的数组
    cout <<tell<<endl;   //显示&tell[0]的地址
    cout <<&tell<<endl; //显示整个数组的地址
    

      从数字上说两个地址相同;但从概念上说,&tell[0](即tell)是一个两个字节的内存块的地址,而&tell是有个20字节内存块的地址。因此,表达式tell+1将地址值加2,而表达式&tell+1将地址加20.换句话说,tell是一个short指针(*short),而&tell是一个这样的指针,即指向包含20个元素的short的数组(short(8)[20]).

    3、指针小结:

      1.指针声明

    typeName * pointerName;
    //例子
    double * pn;
    char * pc;
    //其中pn和pc 都是指针,而double*和char*都是指向double的指针和指向char的指针。
    

      2.给指针赋值

        应将内存地址赋值给指针。可以对变量应用& 运算符,来获得被命名的内存=地址,new运算符返回未命名的内存地址。

    double * pn;
    double * pa;
    char * pc;
    double bubble = 3.2;
    pn  = &bubble;
    pc = new char;
    pa = new double[30];
    

      3、对指针解除引用;

        对指针解除引用意味着获得指针指向的值,对指针应用解除引用或间接值运输符(*)来解除引用。因此,如果先上面的例子中的那样,pn是指向bubble的指针,则*pn是指向的值即3.2.

    cout << *pn; //打印bubble的值
    *pc = 'S';//给*PC赋值
    

      4、数组名:

        在多数情况下,C++将数组名视为数组的第一个元素的地址。一种例外情况是,将sizeof运算符用于数组名时,此时经返回整个数组的长度(单位位置字节)。

      5、指针算术

        C++允许将指针和整数相加,加1 的结果等于原来的地址加上指向对象占用的总字节数。

      8、数组表示法和指针表示法;

        使用方括号数组表示法等同于对指针解除引用;因此对于指针和数组名,既可以使用指针表示法,也可以使用数组表示法。

    int * pt = new int [10];
    *pt  = 5;
    pt[10] = 6;
    pt[9] = 44;
    int coats[10];
    *(coats +4)= 12;
    
  • 相关阅读:
    arm-linux-gcc-4.5.1的安装…
    OK6410之tftp下载内核,nfs…
    非常详细的ok6410的linux系统移植…
    2009-2010网络最热的&nbsp;嵌入式…
    Vue-基础(二)
    【SpringBoot】Springboot1.5.9整合WebSocket
    Hadoop本地环境安装
    Vue-基础(一)
    【Jwt】JSON Web Token
    【JDK8】Java8 新增BASE64加解密API
  • 原文地址:https://www.cnblogs.com/wanshuai/p/9101547.html
Copyright © 2020-2023  润新知