C++ 怎么让数组动态的分配内存来存储.?
我学过C语言C语言中数组的大小是固定的事先必须开一个足够大的数组但我听说在C++中可以动态分配内存空间用多少就开多少的数组怎么实现啊?我C语言功底不错不过C++没有怎么学...
我学过C语言
C语言中数组的大小是固定的
事先必须开一个足够大的数组
但我听说在C++中可以动态分配内存空间 用多少就开多少的数组
怎么实现啊?
我C语言功底不错 不过C++没有怎么学
比如我要建个领结表保存节点之类的
如果不动态分配内存
那么我不是要开n*n(n是节点数)大小的数组
怎么能够让我 用多少 数组就开到多少呢? 展开
C语言中数组的大小是固定的
事先必须开一个足够大的数组
但我听说在C++中可以动态分配内存空间 用多少就开多少的数组
怎么实现啊?
我C语言功底不错 不过C++没有怎么学
比如我要建个领结表保存节点之类的
如果不动态分配内存
那么我不是要开n*n(n是节点数)大小的数组
怎么能够让我 用多少 数组就开到多少呢? 展开
8个回答
展开全部
首先对于你的问题明确一下:
第一:你是说自己写一个动态分配的数据么?如果是那样的话,你使用C中malloc和realloc,然后使用free释放,方法一楼已经说过,不多说了;
你也可以使用C++中的new和delete,new和malloc基本差不多,但是new和delete是C++中的,对用类使用的话,new会调用类的默认构造函数,delete会调用类的析构函数,malloc和free不具上述功能。
第二:如果你说的是动代数组的话,C++标准库,也就是STL中有,数组是vector,链表是list
vector和list都是自动增长的,也就是自动分配内存的,不用你管,只管使用即可,对于vector和list的实现,是由标准库的牛人实现的,就如同调用C中的abs函数一样,abs是C标准库中的函数,实现也是有标准库的旅纳大牛实现的,我们只管使用;对于STL的原拆扮没理有很多书讲解,如果有兴趣可以看看相关书籍,比如:《C++ 标准程序库》、侯捷同学的《STL源码剖析》等,如果了解标准库的使用的话,《C++ primer》等很多书籍中也都有讲解;
对于vector简单介绍两句吧:vector 使用的了C++中的模版机制,定义了一套对应的接口函数进行操作;
例如定义一个放置unsigned int类型的数组:
#include <vector>
typedef std::vector< unsigned int > UINTARRAY;
UINTARRAY m_arrayA;
循环从数组最后添加10个元素:
unsigned int unTmp, unCount = 0;
for( unTmp = 0; unTmp < unCount ; unTmp++ )
{
m_arrayA.push_back( unTmp );
}
删除所有元缺指素:
m_array.clear();
还有很多函数,以及iterator。
不知道我回答的是不是你问的,不过希望你以后提问题,描述清楚一些,让解答人能明确你的问题!
第一:你是说自己写一个动态分配的数据么?如果是那样的话,你使用C中malloc和realloc,然后使用free释放,方法一楼已经说过,不多说了;
你也可以使用C++中的new和delete,new和malloc基本差不多,但是new和delete是C++中的,对用类使用的话,new会调用类的默认构造函数,delete会调用类的析构函数,malloc和free不具上述功能。
第二:如果你说的是动代数组的话,C++标准库,也就是STL中有,数组是vector,链表是list
vector和list都是自动增长的,也就是自动分配内存的,不用你管,只管使用即可,对于vector和list的实现,是由标准库的牛人实现的,就如同调用C中的abs函数一样,abs是C标准库中的函数,实现也是有标准库的旅纳大牛实现的,我们只管使用;对于STL的原拆扮没理有很多书讲解,如果有兴趣可以看看相关书籍,比如:《C++ 标准程序库》、侯捷同学的《STL源码剖析》等,如果了解标准库的使用的话,《C++ primer》等很多书籍中也都有讲解;
对于vector简单介绍两句吧:vector 使用的了C++中的模版机制,定义了一套对应的接口函数进行操作;
例如定义一个放置unsigned int类型的数组:
#include <vector>
typedef std::vector< unsigned int > UINTARRAY;
UINTARRAY m_arrayA;
循环从数组最后添加10个元素:
unsigned int unTmp, unCount = 0;
for( unTmp = 0; unTmp < unCount ; unTmp++ )
{
m_arrayA.push_back( unTmp );
}
删除所有元缺指素:
m_array.clear();
还有很多函数,以及iterator。
不知道我回答的是不是你问的,不过希望你以后提问题,描述清楚一些,让解答人能明确你的问题!
展开全部
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
*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假设你的数据时int型的。
int
*p
=
null;
int
n;
scanf("%d",&n);
p
=
malloc(n,
sizeof(int));
//
这样分配了n个int型数据的空间,并且p指向空间首地址
排序那个谨大就自己采用一种排序方法吧。操作闹晌好p可以说是跟操作一个数组一样的
p[0]就是第一个元素液铅。p[n-1]就是数组最后一个元素。。
最后调用free(p)释放掉申请的内存
int
*p
=
null;
int
n;
scanf("%d",&n);
p
=
malloc(n,
sizeof(int));
//
这样分配了n个int型数据的空间,并且p指向空间首地址
排序那个谨大就自己采用一种排序方法吧。操作闹晌好p可以说是跟操作一个数组一样的
p[0]就是第一个元素液铅。p[n-1]就是数组最后一个元素。。
最后调用free(p)释放掉申请的内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组的大小,C与C++应当都是固掘拍定的。
只不过拆竖指针可以用malloc和realloc进行扩容。判御羡
如
int *p=(int *)malloc(10*sizeof(int));
p=(int *)realloc(1000*sizeof(int));
只不过拆竖指针可以用malloc和realloc进行扩容。判御羡
如
int *p=(int *)malloc(10*sizeof(int));
p=(int *)realloc(1000*sizeof(int));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言中数组也一样可以通薯模铅过动态数好分配得到
用malloc(个数*sizeof( ))
calloc(个码滚数,sizeof( ))
都可以
用malloc(个数*sizeof( ))
calloc(个码滚数,sizeof( ))
都可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询