c++ 如何定义未知元素个数的数组

我要定义一个一维数组,但是数组元素个数未知,需要通过计算得到,该如何定义呢... 我要定义一个一维数组,但是数组元素个数未知,需要通过计算得到,该如何定义呢 展开
 我来答
chailinyan91
推荐于2018-03-29 · TA获得超过126个赞
知道答主
回答量:16
采纳率:0%
帮助的人:0
展开全部
如果数组的元素个数不知道的话,只能通过动态内存分配了,静态内存分配是没有办法实现的,因为静态内存分配在定义数组的时候必须指定数组的大小为一个常量或者常数,例如:
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指针中
50573750
2008-03-21 · TA获得超过976个赞
知道大有可为答主
回答量:1800
采纳率:100%
帮助的人:0
展开全部
可以了,现在的C99标准允许变量充当[。。],但你的用支持c99的编译器,如vc2005..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
onlycyan
2008-03-21 · TA获得超过644个赞
知道答主
回答量:437
采纳率:0%
帮助的人:0
展开全部
我记得直接定义array时候,如int array[....这里面不能跟算式,一定要是const],但是用malloc就可以用算式分配大小。。。

你还是搞个上限,定义大点吧。或者用c++里的vector啊很好用的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ggdmdf
2008-03-21 · TA获得超过1520个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1243万
展开全部
1.定义大点的数组,后面呢就用数组的一部分,前面有人提过了.
2.使用const限制变量,但是这样定义的数组也没办法是未知的...
3.用new[] delete[],或者低调点,用malloc和free
4.用stl中的vector(实际上也是使用了new[]和delete[]...)
5.使用局部数组,e.g.
void func(int n) {
int arr[n]; // 最好先对n进行检测下下...
//...
}

...
func(2*1-3+10);//()的东东用你的表达式代替了
这种办法实际上使用的也是动态申请内存的方式,这是由编译器控制的,所以好处是你不需要管...
6.还有的话我再想想...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cloudy_n
2008-03-21 · TA获得超过171个赞
知道小有建树答主
回答量:264
采纳率:0%
帮助的人:0
展开全部
new delete

看来,兄弟,你都没怎么看过基础.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式