在C中如何定义动态数组?

时间:2022-06-01 20:32:38
在C中如何定义一个动态数组,其长度由用户自行输入!
如:
   int a[n];
   int n;
   scanf("%d",n);
当用户输入n的值后,便确定了整个数组的长度了。
但是上述方法,不被编译器认可!
请各位大虾帮忙!
在此谢过!

36 个解决方案

#1


int a[n];
   int n;
   scanf("%d",n);


改为:
int n ,*a;
 scanf("%d",&n);
 a = (int *) malloc(sizeof(int)*n);

#2


数组的长度不可以是变量。那样的话,执行到这个函数的时候,编译器就不知道栈指针该增长多少。
不过上次看到有人讨论说据说C语言的最新标准支持动态数组大小,没试过。

#3


malloc / free
(or calloc)

#4


还是用C++好啊  嘿嘿

#5


二楼的方法.

#6


动态内存分配就可以了.
不过表要忘记最后要delete啊.

#7


楼主的要求c99标准已经支持了,下载一个新的gcc版本吧。

#8


C99是支持动态数组了,

不过还是用malloc动态分配比较好。

#9


同意楼上的,C99已经支持动态数组了,
楼主,可以看看C语言大全,这本书上面说的十分清楚

#10


不知道是楼主要的不:
  这是动态二维数组的定义
      int nRow = 5;     //nRow是二维数组的行
      int nList = 10;   //nList是列
      char * *pszFileName;

      pszFileName = (char * *)malloc( nRow * sizeof(char *));
      for(int i = 0; i < nList; i++){
          pszFileName[i] = (char *)malloc(nList * sizeof(char));
      }
  注意:因为是动态的所以pszFileName[0]+1是得不到pszFileName[1]的地址.

#11


直接用 T *a类似形式就可以了,T为编译器支持的数据型别。记得用的时候malloc内存空间即可。

#12


可以通过malloc和remalloc函数实现无限内存调用的! 具体你可以查看下函数的用法,很简单的。

#13


int m,n;
cin>>m>>n;
double **b = new double* [m];
   for(i = 0; i < m; i++)
      b[i] = new double[n];
这...

#14


该回复被版主删除

#15


mark

#16


C里面没有什么好的方法,用C++把,还有MALLOC之后的内存,注意FREE

#17


动态内存分配吧,就是要注意释放噢

#18


GCC和vc好象都支持变长数组,在forte c中不支持变长数组!
具体的用法:type p[0];就可以了

#19


TC2.0和3.0中不存在动态数组这一名称,只有通过动态分配内存来实现。想要动态数组,还是到C++里面吧!

#20


用个STL的容器多好。

#21


用malloc可实现动态分配,引用也可用数组形式.

#22


不太清楚现在能不能用动态的数组,最好还是用malloc开辟动态存储区吧。用指针。

#23



   int temp;
   scanf("%d",temp);
const int n=temp;
int array[n];

#24


不好意思,上面的不行

#25


数组的长度应该就是常量,不能是变量,所以在C语言里不能定义动态数组。

#26


C99标准中有变长数组,但是有的编译器不支持

#27


数组定义错误,定义的数组长度应该是固定值。
动态叔祖的定义可以这样:
int *a;
int n;
scanf("%d",n);
a=(int *)malloc(n,1);
这样定义的a就可以实现动态叔祖了。
例如*(a+i)=100;

#28


要使用calloc,不是malloc,着两个函数的用法是有很大区别的

#29


C99是支持动态数组了,

不过还是用malloc动态分配比较好。

#30


建议你看一本书:<<数值算法c语言版>>
具体的就不记得了

#31


mark

#32


最好是malloc,这样也比较直观。
C++里面就用new吧。

#33


二楼方法

#34


用c++的STL多方便

#35


可以先用预处理命令定义一个数组大小,然后就用malloc函数分配动态存储空间.就可以解决动态数组的问题了.

#36


malloc分配的是不连续的

calloc分配的是连续的一段地址

#1


int a[n];
   int n;
   scanf("%d",n);


改为:
int n ,*a;
 scanf("%d",&n);
 a = (int *) malloc(sizeof(int)*n);

#2


数组的长度不可以是变量。那样的话,执行到这个函数的时候,编译器就不知道栈指针该增长多少。
不过上次看到有人讨论说据说C语言的最新标准支持动态数组大小,没试过。

#3


malloc / free
(or calloc)

#4


还是用C++好啊  嘿嘿

#5


二楼的方法.

#6


动态内存分配就可以了.
不过表要忘记最后要delete啊.

#7


楼主的要求c99标准已经支持了,下载一个新的gcc版本吧。

#8


C99是支持动态数组了,

不过还是用malloc动态分配比较好。

#9


同意楼上的,C99已经支持动态数组了,
楼主,可以看看C语言大全,这本书上面说的十分清楚

#10


不知道是楼主要的不:
  这是动态二维数组的定义
      int nRow = 5;     //nRow是二维数组的行
      int nList = 10;   //nList是列
      char * *pszFileName;

      pszFileName = (char * *)malloc( nRow * sizeof(char *));
      for(int i = 0; i < nList; i++){
          pszFileName[i] = (char *)malloc(nList * sizeof(char));
      }
  注意:因为是动态的所以pszFileName[0]+1是得不到pszFileName[1]的地址.

#11


直接用 T *a类似形式就可以了,T为编译器支持的数据型别。记得用的时候malloc内存空间即可。

#12


可以通过malloc和remalloc函数实现无限内存调用的! 具体你可以查看下函数的用法,很简单的。

#13


int m,n;
cin>>m>>n;
double **b = new double* [m];
   for(i = 0; i < m; i++)
      b[i] = new double[n];
这...

#14


该回复被版主删除

#15


mark

#16


C里面没有什么好的方法,用C++把,还有MALLOC之后的内存,注意FREE

#17


动态内存分配吧,就是要注意释放噢

#18


GCC和vc好象都支持变长数组,在forte c中不支持变长数组!
具体的用法:type p[0];就可以了

#19


TC2.0和3.0中不存在动态数组这一名称,只有通过动态分配内存来实现。想要动态数组,还是到C++里面吧!

#20


用个STL的容器多好。

#21


用malloc可实现动态分配,引用也可用数组形式.

#22


不太清楚现在能不能用动态的数组,最好还是用malloc开辟动态存储区吧。用指针。

#23



   int temp;
   scanf("%d",temp);
const int n=temp;
int array[n];

#24


不好意思,上面的不行

#25


数组的长度应该就是常量,不能是变量,所以在C语言里不能定义动态数组。

#26


C99标准中有变长数组,但是有的编译器不支持

#27


数组定义错误,定义的数组长度应该是固定值。
动态叔祖的定义可以这样:
int *a;
int n;
scanf("%d",n);
a=(int *)malloc(n,1);
这样定义的a就可以实现动态叔祖了。
例如*(a+i)=100;

#28


要使用calloc,不是malloc,着两个函数的用法是有很大区别的

#29


C99是支持动态数组了,

不过还是用malloc动态分配比较好。

#30


建议你看一本书:<<数值算法c语言版>>
具体的就不记得了

#31


mark

#32


最好是malloc,这样也比较直观。
C++里面就用new吧。

#33


二楼方法

#34


用c++的STL多方便

#35


可以先用预处理命令定义一个数组大小,然后就用malloc函数分配动态存储空间.就可以解决动态数组的问题了.

#36


malloc分配的是不连续的

calloc分配的是连续的一段地址