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