• C++指针动态分配数组和数字-详细


    C++用指针动态分配空间——数组、数字

    1、使用new关键字来分配内存

    C++中的指针的真正用处是可以动态使用空间(内存)。C语言可以使用malloc函数来实现动态分配,其原理也是指针,但是C++有更好的方式——new关键字。

    下面来试试这种新技术,在运行阶段为一个int值分配未命名的内存,并使用指针来访问这个值

    int *pn = new int

     

    new int告诉程序,需要适合存储int的内存,new运算符根据类型来确定需要多少字节的内存

    分配内存通用格式如下:

    typeName * pointer_name = new typeName;

     

    需要在两个地方制定数据类型:用来制定需要什么样的内存和用来声明合适的指针

    下面的实例程序演示了如何将new用于两种不同的类型。

    //chapter4.17  use_new.cpp
    
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    
    {
    
    int nights = 1001;
    
    int * pt = new int; //给pt指针一个新的int内存
    
    *pt = 1001;
    
    cout << "nights value = ";
    
    cout << nights << ": location " << &nights << endl;
    
    cout << "int ";
    
    cout << "value = " << *pt << ": location = " << pt << endl;
    
    
    
    double * pd = new double;
    
    *pd = 10000001.0;
    
    
    
    cout << "double ";
    
    cout << "value = " << *pd << ": location = " << pd << endl;
    
    cout << "location of pointer pd: " << &pd << endl;
    
    cout << "size of pt = " << sizeof(pt);
    
    cout << " : size of *pt = " << sizeof(*pt) << endl;
    
    cout << "size of pd = " << sizeof(pd);
    
    cout << " : size of *pd = " << sizeof(*pd) << endl;
    
    return 0;
    
    }

    以下是程序的输出:

    nights value = 1001: location 0x71fe34
    
    int value = 1001: location = 0x1d1590
    
    double value = 1e+007: location = 0x1d15b0
    
    location of pointer pd: 0x71fe28
    
    size of pt = 8 : size of *pt = 4
    
    size of pd = 8 : size of *pd = 8

     

     

    1. 使用delete释放内存

    C++可以用new来申请空间,但是内存空间会满的,所以另一个关键字出现了——delete,用来释放空间,用new申请过来的内存池被占用一部分,用完使用delete语句将其释放,防止内存占满,报废……

    实例:

    int * ps = new int;

    ... //执行操作

    delete ps;

    此实例可以将ps指针直接释放掉

    乱使用delete是不安全的,下面列举一个指针的用法,和是否安全

    int * ps = new int;  //ok

    delete ps;  //ok

    delete ps;  //不ok因为ps已经删除

    int jugs = 5;

    int * pi = &jugs;

    delete pi; //不行,不允许,内存没分配

     

    1. 使用new创建动态数组

    其实数组就是指针!

    还是用new关键字,malloc同样可以。

     

    int * psome = new int [10]; //附10个下边空间

     

    删除一个数组的时候也用delete,改成如下方法

    delete [] psome;

    通用分配格式:

    type_name * pointer_name = new type_name [num_elements];

     

    1. 使用动态数组

    如何使用呢?

    先定义一个

    int * psome = new int [10];

    那么现在psome就是一个数组了

    实例:

    #include <iostream>
    
    
    
    using namespace std;
    
    
    
    int main()
    
    {
    
        double * p3 = new double[3]; //3个元素的数组
    
    p3[0] = 0.2;
    
    p3[1] = 0.5;
    
    p3[2] = 0.8;
    
    cout << "p3[1] is: " << p3[1] << ".
    ";
    
    p3 += 1;
    
    cout << "now p3[0] is:"  << p3[0] << endl;
    
    p3 -= 1;
    
    delete [] p3;
    
    return 0;
    
    }

    其中p3+=1这一句是可以将整个数组的所有地址加一,所以错位了p3[0]等于了原来的p3[1]

    最后删除的时候,p3必须恢复(p3-=1)原状,才可以删除,否则有一个元素空了,会报错!

     

    还可以用变量定义数组下标个数

    例如

    const int cc = 11;

    int *p = new int[cc];

    这样子定义数组的时候可以用指针了,不一定非用向量了,可以最节省空间!力扣刷题找到了新方法

  • 相关阅读:
    转:测试驱动开发全攻略
    转:如何提高自己的归纳总结能力?
    转:从编译链接过程解析static函数的用法
    C++ 不能在类体外指定关键字static
    转:画图解释 SQL join 语句
    转:[置顶] 从头到尾彻底理解KMP(2014年8月22日版)
    转:The Knuth-Morris-Pratt Algorithm in my own words
    转:数组与指针的区别
    删除单链表中间节点
    如果判断两个单链表有交?第一个交点在哪里?
  • 原文地址:https://www.cnblogs.com/coding365/p/12872177.html
Copyright © 2020-2023  润新知