一、简介
变长数组又成c99 柔性数组,是非标准的拓展
形如:
struct test {
char p[];
};
或者 struct {
char p[0];
};
在实际的物理上是没有占用字节的。目的是为了方便的动态增加内存长度,比如你要保存一个字符串,事先不知道字符串长度,可以采用此类方法动态分配。对于该变量的类型 可以随意,比如int、long 等。
二、各平台的比较
代码如下:
struct test{
char p[];
};
int main()
{
struct test ls;
printf ("%d %d \n", sizeof(ls), sizeof(ls.p));
}
windows输出结果为:
linux 输入的结果为: 0,0
总结:可变变量不占字节。
注意点:
1. 在使用可变变量时候 要记得malloc( + 特定需要的长度(如: strlen("123")))
2. windows 在进行malloc 时候如果不增加长度。进行 free 时候就会报错。提示broken 块值。linux不会报错
3. 形如: 大小为 4 ;p 仍然为0
struct test{
int a;
char p[];
};
4. 可变数组只能放在结构体末尾
5. 仅在 结构体中、extern、形参才能用【】。其他的要指明大小
6. char p[1] 值大小为 1.