可变长数组在c里面怎样定义?

glock18 2004-09-04 01:29:58
比如想写下面一段程序:
void test(int i, int j)
{
int Array1[i];
double Array2[j];
}
在支持c99的编译器如gcc下可以编译通过,但是有些编译器就不行了,不知道那位知道有什么解决办法?
谢谢!
...全文
495 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2004-09-06
  • 打赏
  • 举报
回复
“变长数组”是C99新增加的特性,很多编译器都不支持的。要想让你的代码可以在多种编译器中编译的话,还是先不要使用。

我觉得“变长数组”其时并没有很重大的意义,与Pascal中的“动态数组”相比功能太弱,也没有什么优点。其时在C中“数组”一直不能算作一个完整的类型,如果C标准在数组方面作一些大的改进会更有好处。
yangki 2004-09-06
  • 打赏
  • 举报
回复
循环free
ruidiisy 2004-09-06
  • 打赏
  • 举报
回复
free(Array[i])
glock18 2004-09-06
  • 打赏
  • 举报
回复
int **Array = (int**) malloc(i*sizeof(int*));
*Array(i) = (int*) malloc(i*sizeof(int));
如果是这种写法的话,那么释放内存的话是怎么样的呢?
free(Array)就行了吗?
nicewinds 2004-09-05
  • 打赏
  • 举报
回复
free(Array1) ;
free(Array2) ;
glock18 2004-09-05
  • 打赏
  • 举报
回复
我改完程序后编译出现了如下错误:
INTERNAL ERROR:register allocation failed....
这个错误是不是和申请的内存没有释放有关系?
ypengfei 2004-09-05
  • 打赏
  • 举报
回复
int* Array1=(int*)malloc(sizeof(int)*i*2);
double* Array2=(double*)malloc(sizeof(double)*j*2);

这里这样可以似乎也可以定义出二维数组,因为数组内存地址是连续分配的……
oldjackyone 2004-09-04
  • 打赏
  • 举报
回复
默默无语...
daryl715 2004-09-04
  • 打赏
  • 举报
回复
用vc好些
cchengang 2004-09-04
  • 打赏
  • 举报
回复
比如想写下面一段程序:
void test(int i, int j)
{
int Array1[i];
double Array2[j];
}
在支持c99的编译器如gcc下可以编译通过,但是有些编译器就不行了,不知道那位知道有什么解决办法?

熊主任 2004-09-04
  • 打赏
  • 举报
回复
动态数组是GNU C对ANSI C做出的扩展,对于不支持的编译器只能用动态分配了。
glock18 2004-09-04
  • 打赏
  • 举报
回复
不过这条语句*Array(i) = (int*) malloc(i*sizeof(int));里面Array[i]前的*是不是应该去掉?
glock18 2004-09-04
  • 打赏
  • 举报
回复
不错的方法,谢谢了!!!
goodluckyxl 2004-09-04
  • 打赏
  • 举报
回复
int *Array1[2];

Array[1] = (int*) malloc( i*sizeof(int) );
///////
int **Array = (int**) malloc(i*sizeof(int*));
*Array(i) = (int*) malloc(i*sizeof(int));
glock18 2004-09-04
  • 打赏
  • 举报
回复
上面的问题解决了,可是如果数组是二维以上的话那该如何定义呢?
void test(int i, int j)
{
int Array1[2][i];
double Array2[i][j];
}
如果是这种情况的话,我不太清楚具体的写法了,晕,基础太差了...
hewittlee 2004-09-04
  • 打赏
  • 举报
回复
malloc 动态分配内存
realloc 追加分配
nicknide 2004-09-04
  • 打赏
  • 举报
回复
晕,这个没有什么可以恍然大悟吧?这个是最最基本的东西了啊……
楼主还要继续努力学习……
glock18 2004-09-04
  • 打赏
  • 举报
回复
原来可以这样,恍然大悟,谢谢了!!!
goodluckyxl 2004-09-04
  • 打赏
  • 举报
回复
malloc 函数是c动态分配内存函数]
realloc可以追加分配
用完记得free掉

lemon520 2004-09-04
  • 打赏
  • 举报
回复
int* Array1=(int*)malloc(sizeof(int)*i);
double* Array2=(double*)malloc(sizeof(double)*j);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧