struct结构体的变长特性

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 struct mumble
 6 {
 7     char pc[0];
 8 };
 9 
10 void main()
11 {
12     char* string="hello world\n";
13     pmumble=(struct mumble*)malloc(sizeof(struct mumble)+strlen(string)+1);
14     strcpy(pmumble->pc,string);
15     cout<<pmumble->pc;
16     //struct mumble m[2];不允许变长结构体为数组,因为数组是连续的,而struct长度未知
17     system("pause");
18 }

同理

struct mumble
{
        char pc[0];
        int i;
};

这种结构体也是不允许的,应该把char pc[0]放在最后,一个结构体里只允许一个char pc[0],也就是说只允许有一个数据成员是不定长的。

 struct mumble
 {
        char ptr_a[0];
        char ptr_b[0];
 };

上面结构体也会出现编译错误

 struct mumble
 {
        char ptr[];
 };

最好写成上面结构体,这才是标准写法

参考资料:http://blog.sina.com.cn/s/blog_4a3c301c0100fvkj.html

              http://hi.baidu.com/zkheartboy/blog/item/e036eded2da4b44a79f055f7.html

posted @ 2012-05-31 21:49  Raymond东东  阅读(253)  评论(0编辑  收藏  举报