社区
C语言
帖子详情
可变长数组在c里面怎样定义?
glock18
2004-09-04 01:29:58
比如想写下面一段程序:
void test(int i, int j)
{
int Array1[i];
double Array2[j];
}
在支持c99的编译器如gcc下可以编译通过,但是有些编译器就不行了,不知道那位知道有什么解决办法?
谢谢!
...全文
495
20
打赏
收藏
可变长数组在c里面怎样定义?
比如想写下面一段程序: void test(int i, int j) { int Array1[i]; double Array2[j]; } 在支持c99的编译器如gcc下可以编译通过,但是有些编译器就不行了,不知道那位知道有什么解决办法? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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);
结构体中最后一个数组长度为零
在Linux系统里,/usr/include/linux/if_pppox.h
里面
有这样一个结构: struct pppoe_tag { __u16 tag_type; __u16 tag_len; char tag_data[0]; } __attribute ((packed)); 最后一个成员为可变长的数组,对于TLV(Type-Length-Value)形式的结构,或者其他需要变长度的结构体,用这种方式
定义
最好。使用起来非常方便,创建时,malloc一段结构体大小加上可变长数据长度的空间给它,可变长部分可按数组的方式访问,释放时,直接把整个结构体free掉就可以了。
JavaScript jQuery 中
定义
数组与操作及jquery数组操作
首先给大家介绍javascript jquery中
定义
数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象 Javascript不支持多维数组,但是因为数组
里面
可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能 1.1
定义
数组 声明有10个元素的数组 复制代码 代码如下: var a = new Array(10); 此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如 a[2] 但此时元素并未初始化,调用将返回 undefined 以下代码
定义
了个可变数组,并进行赋
javascript的数组和常用函数详解
1.认识数组 数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象。Javascript不支持多维数组,但是因为数组
里面
可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能。 1.1
定义
数组 声明有10个元素的数组: 代码如下:var a = new Array(10);此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如 a[2] 但此时元素并未初始化,调用将返回 undefined。以下代码
定义
了个可变数组,并进行赋值。 代码如下:var a = new Array();a[0] = 10;a[1] = “aaa”;a[2
浅谈golang slice 切片原理
slice介绍 数组的长度在
定义
之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。在初始
定义
数组时,我们并不知道需要多大的数组,因此我们就需要“动态数组”。在Go
里面
这种数据结构叫slice,slice并不是真正意义上的动态数组,而是一个引用类型。slice总是指向一个底层array,slice的声明也可以像array一样,只是不需要长度,它是可变长的,可以随时往slice
里面
加数据。 初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针。数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数
浅谈c语言数组及可
变长数组
1,了解C89标准和C99中数组的区别 以下摘自C89标准和C99标准C11标准的区别 对数组的增强–可
变长数组
C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可
变长数组
,但是只有局部数组才可以是变长的.可
变长数组
的维数在数组生存期内是不变的,也就是说,可
变长数组
不是动态的.可以变化的只是数组的大小.可以使用*来
定义
不确定长的可
变长数组
。 因此,windows上不支持以下程序(c98?),但linux gcc就支持(c99),
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章