怎么实现C语言里面数组的动态分配?

如果我不知道这个数组究竟有多少个元素,比如a[m][n],m和n的值都是不知道的,我要怎么定义这个数组?怎么用malloc给它分配空间?
请给出代码给我参考~谢谢!

1 定义指针。
2 使用malloc函数分配内存。
3 对数组进行访问即可。

对于一维动态数组,直接定义一维指针,并分配内存空间即可。
比如int类型的10个元素动态数组,写作
int *a;
a = (int *)malloc(sizeof(int) * 10);

如果是多维数组,需要从高维向低维逐层分配。如二维数组10*100空间。
int **a;
int i;
a = (int **) malloc(sizeof(int *) * 10); // 先分配10个int*的空间。
for(i = 0; i < 100; i ++)
a[i] = (int *)malloc(sizeof(int) * 100); // 对于每个int*,分配100个元素的空间。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-14
/*
这是一维数组,二维数组类似
int **p= (int**)malloc(m*sizeof(int*) );
int i ;
for(i = 0; i < m; i++)
{
p[i] = (int*)malloc(n*sizeof(int));
}

vc6.0中通过
*/
#include <stdio.h>
#include <malloc.h>

void main()
{
int a=0;
int i=0;
int *p;

printf("输入数组的大小:");
scanf("%d",&a);
p=(int*)malloc(a*sizeof(int));

for(i=0;i<a;i++)
{
printf("p[%d]:",i);
scanf("%d",&p[i]);
}
printf("\n");
for(i=0;i<a;i++)
{
printf("p[%d]=%d\n",i,p[i]);
}
printf("\n");

}
第2个回答  2009-05-14
#include<malloc.h>

int **a = (int**)malloc(sizeof(int*) *m);
int i ;
for(i = 0; i < m; i++)
{
a[i] = (int*)malloc(sizeof(int) *n);
}本回答被提问者采纳
第3个回答  2009-05-14
全都malloc不free?有你们的

C语言如何动态分配二维数组??
动态分配二维数组:void main(int argc, char * argv[]){ int NC=100, NR=200;int i,j;char **a; \/\/ a[NR][NC] -- *a[NR] -- a[j][i]a = (char **) malloc(sizeof(char *) * NR);for (j=0;j<NR;j++){ a[j] = (char *) malloc(sizeof(char) * NC);} \/...

C语言中结构体数组的大小如何动态分配?
\\x0d\\x0a基本类型数组动态分配大小:\\x0d\\x0aint*a=(int*)malloc(sizeof(int)*10);\/\/动态分配10个大小的int类型的内存空间\\x0d\\x0a结构体类型数组分配大小:\\x0d\\x0astructDIYDEFINE\\x0d\\x0a{\\x0d\\x0ainta;\\x0d\\x0acharch;\\x0d\\x0alonglnum;\\x0d\\x0a};\\x0d\\x0a...

c语言:怎样用malloc函数动态分配二维数组,使之可输入数组的行数和每行...
int _tmain(int argc, _TCHAR* argv[]){ int (*p)[4] = (int (*)[4])0;int row = 3;int (*mem)[4] = (int (*)[4])0; \/\/ 定义数组首指针 mem = (int (*)[4])malloc(sizeof(int(*)[4]) * row); \/\/ 分配row行, 4列的数组 \/\/ 分别为二维数组的第一维各个元素...

C语言-动态分配内存 malloc & free
需要先计算需要多少字节的内存空间 数组举例子:释放的时候需要注意, 因为在for循环执行之后,p的地址往前移动了10, 所以需要减去10, 然后再释放p,不然会有问题 \/\/ 当销毁时只需要free一次,malloc了几个字节就会free几个字节,和char类型还是int类型无关 free(p);在一个函数中动态分配的内存,...

c语言中数组动态增长有哪些方法?
可以,但不能是静态数组如int a[50];左边分配在堆栈上,(分配在堆栈上的变量)不能在编译时不知道分多少空间,并且分了多少空间就是多少。如果想让数组大小动态分配,可以使用下面做法,记得用完要free:int* a=(int*)malloc(n*sizeof(int));\/\/n是数组的大小。或者这样calloc函数的一个好处就是...

...然后根据数组长度动态分配储存空间。随机生成两个n位整数放在数列...
init_array(int *p,int n){ int i; srand((unsigned)time(NULL)); for(i=0;i<n;p[i++]=rand()%90+10);}void mysort(int *p,int n){ int i,j,k; for(i=0;i<n;i++){ for(k=i,j=k+1;j<n;j++) if(p[k]...

请问C语言中怎么将一个数组的大小根据我输入扫描的数来进行变化啊?
在C语言中,数组的大小通常是在编译时确定的,无法在运行动态改变。但是,你可以使用指针和动态内存分配来实现类似的效果。具体步骤如下:1. 首先,声明一个指针变量和一个整型变量,用于存储输入的数组大小。int *arr;int size;2. 接下来,通过用户输入获取数组的大小。printf("请输入数组的大小:");...

C语言——动态数组的创建和使用
我们先来了解一维动态数组的创建与使用。其基本语法为:类型说明符 * 数组名 = (类型说明符*)malloc(数组长度 * sizeof(类型说明符)),其中`malloc`函数用于动态分配内存空间。接下来是二维动态数组的创建与使用。具体实现代码中已包含详细注释,如有疑问欢迎在评论区提问。希望本篇文章能对您有所帮助...

C语言动态分配二维数组问题
如果是free()那就不能放在这里,而是放在if(p){}的程序块中,否则会引起重复释放的错误。参考我下面的代码:...int main() {int **p = malloc2d(2, 2);int i = 0;int j = 0;if (p) {for (i = 0; i < 2; i++){for (j = 0; j < 2; j++){*(*(p + ) + j) ...

c语言数组在内存中是怎么分配的?
C语言使用的内存是虚拟内存。按照功能的不同在C语言中又将虚拟内存为分三类:栈区、堆区、静态数据区,不管是单一变量还是数组,其内存分配都是这样分的。在栈区、静态数据区、堆区会有编译器负责分配、操作系统负责管理,程序员可以在堆区使用malloc()来动态分配堆内存的问题。

相似回答