zoukankan      html  css  js  c++  java
  • 指针和动态数组 new ,delete

    ............心中要有一内存块,以便理解知识
    计算机储存数据必须知道数据的3种属性:
    1.存储在何处.......并起名
    2.值
    3.类型
    (1)int a;a=30;
    (2)int *b=&a;
    (3).int *a,b;注意...整型....指针a,整型...变量b,对每个指针都要有一个*;

    .......................指针..........................................
    1.指针是一个变量,存储的是...值的地址,而不是值本身,
    指针变量 是指向特定变量类型指针,和数组相似
    ..int* tax;...............指向int变量的指针,又叫整型指针
    ..double * str;.............指向double变量的指针
    ..int 指针和double指针虽然指向的数据类型不同, 但这两个变量本身长度的通常是一样的,好比1016可能是超市的地址,也可能是,村庄的地址一样,.....地址的长度或值,不能指示该地址上有什么建筑物,也不指示有关变量的长度或类型的任何信息


    .显示地址,cout常用16进制

    .......................指针与c++原理..........................................
    oop强调的是运行阶段进行决策;
    如:声明一个数组
    要在c++中声明一个数组必须指定长度,一般包含20个元素的数组已经够用,int a[20],但有时需要200元素,为了安全起见,又定义了int a[200],这就造成了内存的浪费,为此c++就采取的方法是,使用关键字new,运行时分配内存,并使用指针来跟踪分配内存的位置

    .................................指针的危险....................................................
    极其重要的一点:
    在c++....创建指针时,计算机只分配.....用来存储.地址的内存.,不给指向的数据分配内存
    警告:
    定义指针时最好指定一个,明确的,适当的地址...
    ...................................指针和数字...........................................................................
    int *pt;
    pt=0xB80000;错误,对0xB80000编译器认为是数字,不会当地址;要这样

    pt=(int*)0xB80000;
    注意:pt是int值的地址,但并不意味着pt本身的类型是int...
    ..............................使用new来分配内存.............................................................................
    只能通过指针来访问,在运行时用new分配的未命名的...内存(以存储值)
    int * pt,a;
    pt=&a;a的地址有两种访问方式,通过a和pt
    int * pt=new int ....申请int变量的内存,并将地址赋给pt;只能通过pt访问
    pt指向的内存称为.....数据对象(指的是为数据项分配的内存)常说,内存块
    通用格式:
    type *指针名=new type ;//只在程序运行时才执行,编译时不执行
    type可以是..结构和基本类型
    值为0的指针称为空指针

    ...........................................使用delete释放内存...................................
    1.需要内存块时...用new操作符来申请,使用完内存块后用delete操作符..归还给内存池
    .....int * ps=new int;
    ........delete ps;释放ps指向的内存块,,但不会删除ps指针本身,ps可以重新指向另一个新分配的内存块。
    2.一定要配对使用new和delete ,否则内存泄露,就是说......被分配的 内存.....再也无法使用了,则程序将由于不断寻找更多内存而终止
    ......int * ps=new int;
    ........delete ps;ok
    ........delete ps;not ok,不可释放已释放的内存

    int jug=5;
    .....int * pd=&jug;
    ........delete jug;not ok,不要使用delete来释放...声明变量来获得的内存
    警告:只能使用delete来释放new分配的内存,不过,对空指针使用delete是安全的;

    int* a=new int;
    int* b=a;
    delete b;也对,释放的内存块就是new分配的,
    但一般不让两个指针都指向..同一内存块,会增加重复删除同一内存块的可能性
    ..........................................使用new来创建动态数组...............................................
    new的用武之地在大型数据,如数组,字符串,结构,类
    声明的数组,编译时就为它分配内存,不管运行时用不用,称静态联编
    使用new,运行时需数组要就建,不需要就不建,还可以在运行时选择数组长度,称动态联编
    使用new为数组分配的格式;
    类型 * 指针名=new 类型 [lenth];指针指向数组首地址
    相应的 delete [] 指针名 ;释放整个数组占用的内存块
    example:
    int* psome=new int [10];
    delete [] psome;
    实际上,程序还跟踪了分配的内存量,以便用delete能正确释放全部内存, 但这些
    这些信息是不公开的,不能使用sizeof操作符来确定动态分配数组包含的字节数
    ..........................................动态数组的使用.................................................................
    # include <iostream>
    using namespace std;
    int main()
    {

    double *p3=new double [3];//心中要有一个内存块 和一个手指
    p3[0]=0.2;//将指针p3当数组名来使用
    p3[1]=0.5;
    p3[2]=0.8;

    p3=p3+1;//数组名和指针之间的根本区别:数组名的值无法修改,指针可以算术运算
    cout<<p3[1];
    p3=p3-1;//指针指向原来的值,给delete[]提供正确的地址

    delete [] p3;
    return 0;

    }

  • 相关阅读:
    信息收集渠道:文本分享类网站Paste Site
    泛域名Wildcard Domain
    分享Kali Linux 2017年第12周镜像文件
    同源策略Same-origin policy
    Wireshark如何选择多行
    GPP加密破解工具gpp-decrypt
    HTTP基础认证Basic Authentication
    HAXM 6.0.5显示不兼容Windows
    分享Kali Linux 2017年第11周镜像文件
    bitShark对Android版本的支持
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3046656.html
Copyright © 2011-2022 走看看