【c++】动态数组

【c++】动态数组数组类型变量的三个限制1.数组长度不变;2.编译时必须知道其长度;3.数组只能在定义的语句块内存在。创建动态数组1.可以在运行时再确定数组长度;2.动态数组将一直存在,直到程序显式释放它为止;3.每一个程序执行时都会占用一块可用的内存空间,用于动态分配对象,此内存空间称为程序的“自由存储区”或“堆

大家好,欢迎来到IT知识分享网。

数组类型变量的三个限制
1.数组长度不变;
2.编译时必须知道其长度;
3.数组只能在定义的语句块内存在。

创建动态数组
1.可以在运行时再确定数组长度;
2.动态数组将一直存在,直到程序显式释放它为止;
3.每一个程序执行时都会占用一块可用的内存空间,用于动态分配对象,此内存空间称为程序的“自由存储区”或“堆”;
4.c语言使用mallco和free在堆中分配存储空间;
5.c++语言使用new和delete堆中分配存储空间。

动态数组的定义
1.数组变量通过指定类型、数组名和维数来定义:
int arr[10];
2.动态分配数组时,不必为数组对象命名,只需要指定类型和数组长度即可,new表达式返回指向该数组的第一个元素的指针,此返回值初始化了指针p;
int *p = new int[10];
3.如果元素有类类型,将使用该类的默认构造函数实现初始化。如果元素是内置类型,则无初始化
string *p1 = new string[10];//元素使用该string的默认构造函数实现初始化
int *p2 = new int[10];//元素无初始化

int main()
{
    size_t iSize = 10;
    int *p = new int[iSize] ;//元素是内置类型,无初始化
    for(int *pi = p;pi != p+ iSize;pi++)
    {
        cout << *pi  <<endl;
    }

    cin.get();
    return 0;
}

【c++】动态数组

 4.可使用跟在数组长度后面的一对圆括号,对数组元素做值初始化

int main()
{
    size_t iSize = 10;
    int *p = new int[iSize]() ;//元素是内置类型,无初始化,可使用跟在数组长度后面的一对圆括号,对数组元素做值初始化
    for(int *pi = p;pi != p+ iSize;pi++)
    {
        cout << *pi  <<endl;
    }

    cin.get();
    return 0;
}

【c++】动态数组

5.const对象的动态数组需要对数组初始化

6.c++不允许定义长度为0的数组变量,但是new动态创建长度为0的数组是合法的。new返回的指针没有指向任何元素,不能进行解引用操作。

动态数组的释放
1.动态分配的空间最后必须释放,否则内存最终会逐渐耗尽。如果不再需要动态创建的数组,必须显式得将其占用的存储空间还给程序的自由存储区;
1.方法:delect [] p;
2.[]代表删除自由存储区(堆)中的数组,而非单个对象。如果遗漏编译器无法发现这个错误。
3.理论上遗漏[]至少会导致运行时少释放了内存空间,导致内存泄漏,可能会带来严重的运行错误。

 

动态数组的使用

根据判断将strA、strB,2个字符串的内容复制给另一个字符串strC,需要先计算strC字符串数组的长度,申请内存创建动态数组,然后使用strcpy_s复制数字

int main()
{
    int errorFound = 0;
    //errorFound = doJob();//运行成功返回0,否则返回错误代码
    const char *noErr = "sucess";
    const char *err189 = "Error : 操作错误!";
    const char *errTxt;
    if (errorFound == 186)
    {
        errTxt = err189;
    }
    else
    {
        errTxt = noErr;
    }
    int iDimension = strlen(errTxt) + 1;
    char *errMsg = new char[iDimension];
    strcpy_s(errMsg, iDimension, errTxt);
    cout << errMsg << endl;

    cin.get();
    return 0;
}

运行结果:

【c++】动态数组

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31321.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信