C99 提供了一个叫伸缩性数组成员的特性,利用它我们可以声明结构体的最后一个成员具有特殊的属性。这个数组成员有什么特点呢?我们来看两点。
第一,该成员可存在也可不存在,当它不存在时,并不占用结构体的大小。
第二,使用这个伸缩的成员,可以让它具有任意长度的元素。
那么使用伸缩数组成员,要遵守哪些规则呢?一共有三条。
1. 伸缩性数组成员必须是结构体的最后一个成员。
2. 结构体中至少包含一个其他成员。
3. 伸缩性数组的方括号为空。
struct student
{
int score;
char name[];
};
当我们创建一个 `struct student` 类型的变量时,并不能直接使用 `name` 成员,因为编译器并没有为它分配内存。C99 的本意,并不是让我们去定义一个 `struct student` 类型的变量,而是希望我们声明一个指向 `struct student` 的指针,然后用 malloc 来分配空间,既存放 score 成员,也存放伸缩性数组成员所需要的空间。
struct Person
{
int age;
char name[];
};
int main(int argc, char *argv[])
{
char *name1 = "Obama";
char *name2 = "Edward Meng";
struct Person *p1 = (struct Person *)malloc(sizeof(struct Person) + strlen(name1) + 1);
p1->age = 33;
strcpy(p1->name, name1);
p1->name[strlen(name1)] = '\0';
struct Person *p2 = (struct Person *)malloc(sizeof(struct Person) + strlen(name2) + 1);
p2->age = 33;
strcpy(p2->name, name2);
p2->name[strlen(name2)] = '\0';
printf("name:%s age:%d\n", p1->name, p1->age);
printf("name:%s age:%d\n", p2->name, p2->age);
getchar();
}




冀公网安备13050302001966号