c编程的时候数组长度一般都是固定好的,实际上c还能实现变长数组。其实c99中确实是有变长数组的说法,C99中通过允许结构体中的最后一个成员是长度未知的数组实现变长数组,其定义格式如下:
typedef struct _lin
{
int len;
char data[];
}Lin;
有的编译器不接受,可以写成以下方式:
typedef struct _lin
{
int len;
char data[0];
}Lin;
接下来,用sizeof(Lin)测试一下这个结构体的实际大小,结果是4,非常明显data没有占用实际内存,这样我们也成功定义了一个变长数组。怎样使其变长呢?
象其他指针变量一样,具体如下:
Lin *ptrLin = (Lin *)malloc(sizeof(Lin)+size);
size就是数组data的实际长度了,使用完释放内存即可。
free(ptrLin);
这就实现了C语言的柔性数组,应用也很简单,赶紧试试吧。