C++数组动态分配空间

想要一个算法 能根据输入的长度 自定义一个数组的长度,即使浪费一两个存储空间也没事 比如先定义 int a[1]; 然后再追加空间也可以! 但一定要想要多长就有多长!
还有就是数组的下标 可以是const类型的常变量吗?
我用了还是有错误
: error C2057: expected constant expression

用new关键字(这是c++语言):
#include <iostream>
using namespace;
void main()
{
cin>>a;
int *h=new int[a];
}
用以上代码就可定义一个h数组,大小为a;
对于第二个问题,我试过了,可以。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-18

你的程序中的常整形变量const int n=num;其中n只有在程序运行起来的时候才能知道n的值是多少,因为你的n(常整形)是通过传进来的参数来进行赋值操作的,然而数组分配空间的时候必须事先知道数组的大小,所以,会出现错误的bug

第2个回答  2011-03-30
可以利用C语言中的malloc.h头文件
#include<malloc.h>
...
int n=0;
int *Array=(int *)malloc((n+1)*sizeof(int));
输入n,就可以定义一个下标从0到n的数组。追问

数组的下标 可以是const类型的常变量吗?
我用了还是有错误
: error C2057: expected constant expression

追答

把你代码发来看看

追问

int num;
cin >> num;
int y=choice(num,3);
下面是choice
int choice(int num,int pst=3){
int i,coutq=0,x=0;
const int n=num;
int a[n];
for(i=0;i<n;i++)
a[i]=1;//初始化标记
for(i=0;x<n;i++)
{ i=i%n;
if(a[i]==1)
{
coutq++;
coutq=coutq%pst;
if(coutq==0)
a[i]=0,x++;
}
} return i;

第3个回答  2023-04-26
1、使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
2、例程,分配3行4列二维数组:
#include <stdio.h>
#include <malloc.h>
int main()
{
    int **a;
    int i, j;
    a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行
    for (i = 0; i < 3; ++i){//为每列分配4个大小空间
        a[i] = (int*)malloc(sizeof(int)*4);
    }
    //初始化
    for (i = 0; i < 3; ++i){
        for (j = 0; j < 4; ++j){
            a[i][j] = i+j;
        }
    }
    //输出测试
    for (i = 0; i < 3; ++i){
        for (j = 0; j < 4; ++j){
            printf ("%d ", a[i][j]);
        }
        printf ("n");
    }
    //释放动态开辟的空间
    for (i = 0; i < 3; ++i){
        free(a[i]);
    }
    free(a);
    return 0;
}
/*
输出:
0 1 2 3
1 2 3 4
2 3 4 5
*/

第4个回答  2011-03-30
如果不是必须使用数组的话,建议你使用容器 list和vector都可以~~~
不需要分配地址空间的,都是自增长类型~~~

C++ 中如何简单理解动态数组,为什么说他是动态的,使用时还要给它分配...
动态数组就是在程序运行当中分配数组的大小,比如你输入一个n,就可以动态申请含有n个元素的数组a int* a=new int[n]; 动态数组可以避免静态数组过小不够用和过大浪费空间的问题。

c++如何用数组来模拟动态内存分配
四、这时候就可以写动态内存分配的函数了,根据需要分配的大小,找出一片未使用的连续的内存页。比如第二步中定义一页是4字节,需要5个字节的内存,就分配两页(多出来的3字节就没办法了,浪费掉了)。找到内存页后将几个内存页标记为已使用,同时给几个内存页赋想相同的内存分配标识,然后返回第一...

动态分配内存的动态分配内存的方法(C\/C++)
(1)new可用来生成动态无名变量如 int *p=new int;int *p=new int [10]; \/\/动态数组的大小可以是变量或常量;而一般直接声明数组时,数组大小必须是常量又如:int *p1;double *p2;p1=new int⑿;p2=new double [100];l 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间...

C\/C++如何分配未知长度的数组的内存空间?动态内存分配?
a = malloc(k,sizeof(int));两个函数唯一的区别就是第一个函数将开辟的内存空间初始化为0,而malloc却没有。3.然后你就可以把公共元素存入到这个行开辟的内存空间中来(这个也不用多说了吧)4.当你的程序任务完成以后,记得释放你所开辟的内存空间,使用这个命令:free(a)...

请问:C++中数组长度怎么动态分配?!
int N ;\/\/ 定义一个int型整数 N \/\/当N的值确定以后,再定义数组 int *p = new int[N];\/\/p[N]就是你要的数组 \/\/但是这种方法,数组不用以后,必须自己释放 delete []p; \/\/释放数组

c++中有个语句是f0=new double *[Ny]。new double 是什么意思?
new 是C++动态分配内存的一种方式,比如说你定义一个数组double ary[100];它的元素个数确定了就是100个,但是你要是这样(也就是只声明没有为数组分配内存空间大小):double *ary;这种情况适合于比如说你不知道这个数组应该定义多大合适,那么在后面使用这个数组时候很灵活,就可以让它的大小是你实际...

c++中new和delete的用法
在C++编程中,使用new分配的数组可用delete释放。这里释放的是动态分配的数组空间,而不是静态分配的数组空间,详细步骤:1、例如,我们动态创建了一个一维int数组arr,现在需要将它释放。2、这时只需要使用delete[]数组名即可。3、注意,要释放数组所占的内存,[]不能少。否则,用delete则不能完全释放...

C++动态数组的作用
\/\/用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 int *p=new int[len]; ... delete[] p; return 0; } 注意int *p=new int[len];这一句,你不能这样做: int p[len]; C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不...

C\/C++中数组动态申请(malloc\/new等)有上限吗?
具体的数值看你在什么操作系统下了,在Linux下,在32位地址空间为4GB的前提下,操作系统占据1G,其余3G可以让应用程序本身使用,这包括代码、数据、栈空间、堆空间等。windows下有点内存布局也类似,只是具体的数值有点不一样。你说的“我记得C中局部变量的二维数组太大就会运行报错了,结果放全局变量就...

c++中,可以用delete释放一个数组的空间吗?
用delete释放的只能是用new动态分配的数组空间,若数组不是动态分配的则不能用delete释放。举两个例子详细说明一下:int a[100];这个数组a是不能用delete释放空间的,因为这个数组a在声明时就已经说明了空间的大小,在最后程序会自动释放这个空间。int *b;b=new int[100];这个要在最后用delete []b...

相似回答