可以,但不能是静态数组如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是数组的大小。用函数调用能实现数组的动态增长吗?
追答能的 不过不是在你原来的静态数组上增加 而是重新定义一个动态数组 增加到你想要的大小 然后把原来的数组元素赋值给新数组 然后返回新数组首地址
c语言中数组动态增长有哪些方法?
可以,但不能是静态数组如int a[50];左边分配在堆栈上,(分配在堆栈上的变量)不能在编译时不知道分多少空间,并且分了多少空间就是多少。如果想让数组大小动态分配,可以使用下面做法,记得用完要free:int* a=(int*)malloc(n*sizeof(int));\/\/n是数组的大小。或者这样calloc函数的一个好处就是...
c语言中数组可以分为
在C语言中,通常使用malloc、calloc、realloc等函数来动态分配和调整内存。例如,可以使用`int* arr = malloc);` 来动态分配一个包含10个整数的数组。如果需要在运行时改变数组大小,可以使用realloc函数,如`arr = realloc);` 可以将数组大小调整为20个整数。动态数组的优点是可以根据需要灵活调整大小,...
如何用C语言实现动态的字符串数组
分成取数字与取非数字2个函数较简单。get_v()取数字, get_o()取非数字。include <stdio.h> char *get_v(char *a, char *b){ int i=0;while( a[i]>='0' && a[i]<='9') {b[i]=a[i];i++;};b[i]='\\0';strcpy(a,a+i);return b;} char *get_o(char *a, c...
C语言数组动态赋值
输入整型数组,这样循环是可以的。scanf输入格式没有指定,默认是空格分割。也就是说,你要么输入一个数就回车,再输第二个。要么连续输入多个数,用空格分割。看看,你输入格式对不对。
C语言中怎么定义动态的数组长度
这个需求是符合C99标准,只要用支持C99标准的编译器就能通过编译。比如下面的代码,用GCC就能编译、运行。include <stdio.h> int main(){ int x = 2, y = 3;int arr[x][y];return 0;} 如果编译器不支持C99标准,可以用malloc(size_t )这个函数动态分配内存。
c语言动态数组如何扩充空间
c语言动态数组扩充空间,主要是利用动态存储分配库函数来实现的,常用的有malloc函数和calloc函数。malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。例如...
c语言数组元素的删除与增加。
C语言中的数组本质上是在计算机内存中分配的连续空间。如果需要对元素进行插入和删除,并不能直接将内存中为该数组分配的空间进行插入\/新增和删除,而是只能通过数据复制的方式将本来不在这个位置的元素进行移动,看起来像是元素的前移和后移。举个例子吧:整型数组(1, 2, 3, 4, 5),如果要把2删除...
c语言如何实现无限长的数组?
但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。通过下面例子来理解该方法:...
C语言中结构体数组的大小如何动态分配?
结构体类型数据组就和我们平常定义的基本类型的数组一样,只不过是类型变了。基本类型数组动态分配大小:int* a = (int*)malloc(sizeof(int)*10) ; \/\/动态分配10个大小的int类型的内存空间 结构体类型数组分配大小:struct DIYDEFINE { int a;char ch;long lnum;};DIYDEFINE* pDiy = (DIY...
【究根源】详解C语言变长数组
关于数组和指针的存储机制,C语言中有显著的区别:例如,虽然我们可以用&arr[0]来定义arr,但char a[1]中'a'实际上是常量,而char *b是一个指向内存的指针。两者都能通过下标访问,但&a[0]与*b[0]的含义截然不同。动态数组,因其无固定大小,通常从堆上动态分配内存,这使得它们在空间管理上...