四川省建设规划局官方网站,启博微分销,潍坊尚呈网站建设公司 概况,wordpress显示doc在实际的编程中#xff0c;我们经常需要使用变长数组#xff0c;但是C语言并不支持变长的数组。此时#xff0c;我们可以使用结构体的方法实现C语言变长数组。 struct MyData { int nLen; char data[0];}; 在结构中#xff0c;data是一个数组名#xff1b;但该数组没有元素… 在实际的编程中我们经常需要使用变长数组但是C语言并不支持变长的数组。此时我们可以使用结构体的方法实现C语言变长数组。 struct MyData { int nLen; char data[0];}; 在结构中data是一个数组名但该数组没有元素该数组的真实地址紧随结构体MyData之后而这个地址就是结构体后面数据的地址如果给这个结构体分配的内容大于这个结构体实际大小后面多余的部分就是这个data的内容这种声明方法可以巧妙的实现C语言里的数组扩展。 实际用时采取这样 struct MyData *p (struct MyData *)malloc(sizeof(struct MyData )strlen(str)) 这样就可以通过p-data 来操作这个str。 程序实例 #include iostream using namespace std; struct MyData { int nLen; char data[0]; }; int main() { int nLen 10; char str[10] 123456789; cout Size of MyData: sizeof(MyData) endl; MyData *myData (MyData*)malloc(sizeof(MyData) 10); memcpy(myData-data, str, 10); cout myDatas Data is: myData-data endl; free(myData); return 0; } 输出 Size of MyData: 4 myDatas Data is: 123456789 原文链接http://www.2cto.com/kf/201312/261179.html PS必须将指针定义在struct的末尾指针的类型也可以不为char。 总结 柔性数组 它只能放在结构体末尾, 是申明一个长度为0的数组(eg. char data[0] ;或 int data[0];都行) 可以使得这个结构体是可变长的。 转载于:https://www.cnblogs.com/yangchang1117/p/8984170.html