70,023
社区成员




typedef struct st_type
{
int nCnt;
char item[][100];
}type_a;
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));
[/quote]
方法2:可以用指针数组的形式void *arr[100];
type_a a;
a.arr[0] = (char *)("asdads");
cout << (char *)a.arr[0] << endl;
方法3:
type_a *p = (type_a *)malloc(sizeof(type_a) + 5 * 100 * sizeof(char));
strcpy(p->item[0], "asd");
cout << p->item[0] << endl;typedef struct st_type
{
int nCnt;
char item[][100];
}type_a;
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));
struct student{
char name[20];
int age;
char sex;
int weight;
void *attr;
};
3.结构体变长的妙用——0个元素的数组
typedef struct st_type
{
int nCnt;
int item[];
}type_a;
这样我们就可以定义一个可变长的结构,用sizeof(type_a)得到的只有4,就是sizeof(nCnt)=sizeof(int)那个0个元素的数组没有占用空间,而后我们可以进行变长操作了。
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));
这样我们就产生了一个长为100的type_a类型的东西用p-> item[n]就能简单地访问可变长元素,原理十分简单,分配了比sizeof(type_a)多的内存后int item[];就有了其意义了,它指向的是int nCnt;后面的内容,是没有内存需要的,而在分配时多分配的内存就可以由其来操控,是个十分好用的技巧。
注:如果可以用C++,不妨可以用多态试试