zoukankan      html  css  js  c++  java
  • c++ 如何定义未知元素个数的数组?【转】

    如果数组的元素个数不知道的话,只能通过动态内存分配了,静态内存分配是没有办法实现的,因为静态内存分配在定义数组的时候必须指定数组的大小为一个常量或者常数,例如:
    int array[10];
    或者
    const int Size=10;
    int array[Size];

    当然你可以采用常量的方法,但是就是每次必须打开源代码来调整这个数组的大小,很不方便,所以要采用动态内存分配的方法;

    在c语言中:
    int arraysize;//元素个数
    printf("请输入数组的大小:");
    scanf("%d",&arraysize);

    int *array;//用指针指向一个数组
    array=(int *)malloc(arraysize *sizeof(int));//动态内存分配
    ....
    free(array);//最后要释放这个空间,用完了,当然要还给系统

    malloc()函数在内存堆区中寻找未被使用的内存,找够所需的字节数后返回该内存的起始地址。
    所需字节数通过参数知道,在本例中arraysize元素个数,乘以每一个元素的字节数,等于总的字节数;
    每一个元素的字节数通过测字节sizeof()运算符得到,元素的数据类型为int,所以测int类型需要多少字节。
    malloc()函数并不知道用这些内存干什么,所以返回一个没有类型的指针,但对于整型指针array来说,malloc()函数得返回值必须显式转换成整型指针才能被接受。所以前面加了一个(int *)。

    在c++中就可以不用malloc()函数和free()函数了。
    int arraysize;//元素个数
    cout<<"请输入数组的大小:";
    cin>>arraysize;

    int *array;//用指针指向一个数组
    array=new int[arraysize];  //动态内存分配
    ....
    delete []array;//最后要释放这个空间,是一组空间所以加了[]。

    array=new int[arraysize];
    new表示申请空间;什么类型?int;多大?arraysize
    返回该内存的起始地址存到array指针中

  • 相关阅读:
    file & iconv
    UML类图思考
    Rust PhantomData and dropck rgb
    golang recover rgb
    帮上小学的女儿写的一篇文章春夏秋冬
    SAP B1在添加物料主数据时,出现错误提示‘xxxx代码已存在’的解决方法
    SAP B1外协物料处理方法
    SAP B1外发加工件成本的处理方法(曹玉平于奥莱照明)
    SAP B1存在的BUG
    交叉表的实殃及向SQL SERVER数据库中插入数据时,出现乱码或???(问号)的解决方法。
  • 原文地址:https://www.cnblogs.com/nkxyf/p/2547133.html
Copyright © 2011-2022 走看看