struct 的可伸缩数组成员

C99 提供一个成为 伸缩性数组成员 的特性。利用这一特性可以声明结构体的最后一个成员具有特殊的属性。 该数组成员的特性:
1. 该成员可存在,也可不存在,当不存在时,并不占用结构体大小。2. 使用这个伸缩的成员,使它可以具有任意长度元素。
使用可伸缩的成员,规则如下:
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();
}
未经允许不得转载:一亩三分地 » struct 的可伸缩数组成员
评论 (0)

8 + 8 =