c语言中数组动态增长有哪些方法?

用函数调用能实现数组的动态增长吗?... 用函数调用能实现数组的动态增长吗? 展开
 我来答
JINLegend
2013-06-21 · TA获得超过802个赞
知道小有建树答主
回答量:241
采纳率:100%
帮助的人:126万
展开全部

可以,但不能是静态数组如int a[50];左边分配在堆栈上,(分配在堆栈上的变量)不能在编译时不知道分多少空间,并且分了多少空间就是多少。

如果想让数组大小动态分配,可以使用下面做法,记得用完要free:

int* a=(int*)malloc(n*sizeof(int));//n是数组的大小。

或者这样calloc函数的一个好处就是分配完内存区域后会自动把该区域清零,所以特别适合数组:

int* a=(int*)calloc(n,sizeof(int));//n是数组的大小。

延长数组大小的话这样做:

a=(int *)realloc(a,m*sizeof(int));//m新数组的大小。并且,原来malloc或者calloc的内存区域会自动被free掉,不用你操心。
追问
用函数调用能实现数组的动态增长吗?
追答
我上面说的应该很清楚,如果是静态数组是任何方式都不能实现动态增长,因为他的大小压根就是编译时确定的。但是动态申请的内存区域就可以。realloc就是这种方法。
tattackor
推荐于2016-06-01 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:889万
展开全部

一。在原数组单元后面是没法再扩长的,因为后面的单元没法保证一定有。所以,数组原址动态增长肯定是不行的;

二。要么定义长一点的数组,要么自已把N个数组用链表串起来,但很繁琐;

三。重新分配更长的数组,把原数组数据复制过来,再释放掉原数组,这是一般动态数组模块的普遍做法。但效率很低。

例如下面方法都是重新分配更长的数组空间:

int* a=(int*)malloc(n*sizeof(int));//n是数组的大小。
int* a=(int*)calloc(n,sizeof(int));//n是数组的大小。
int* a=(int *)realloc(a,m*sizeof(int));//m新数组的大小。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GodHlpMe
2013-06-21 · TA获得超过8456个赞
知道大有可为答主
回答量:4600
采纳率:46%
帮助的人:1000万
展开全部
权威答案:
一。从技术上来讲,在原数组单元后面是没法再扩长的,因为后面的单元
没法保证一定有。所以,数组原址动态增长肯定是不行的!!
二、要么定义长一点的数组,要么自已把N个数组用链表串起来,但很繁琐;
三、有的语言版本,会提供“扩展数组”的子程序,其实就是
再申请更长的数组,把原数组数据复制过来,
再释放掉原数组,这是一般动态数组模块的普遍做法。
可能看出, 这效率很低。
楼主应该可以知道了,不要再纠结了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
似夕水每
2013-06-21 · TA获得超过196个赞
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:95.9万
展开全部
用链表吧 用 malloc 开辟新空间 每次增加一个数组元素 就开辟一个新空间
或者由用户输入数组大小n 然后开辟一个空间 *a = (int *)malloc(sizeof(int)*n);
就可以使用a 数组 比如初始化
for(i = 0; i < n; i++)
scanf("%d", a[i]);
追问
用函数调用能实现数组的动态增长吗?
追答
能的 不过不是在你原来的静态数组上增加  而是重新定义一个动态数组  增加到你想要的大小  然后把原来的数组元素赋值给新数组 然后返回新数组首地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式