一、简介
变长数组又成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.
本文介绍了C99中的柔性数组(变长数组),一种用于动态调整数组大小的非标准扩展特性。通过示例展示了如何在不同平台上使用柔性数组,并讨论了其在Windows和Linux系统下的行为差异。
1080

被折叠的 条评论
为什么被折叠?



