柔性数组–flexible array
struct S
{
int a;
int arr[]; '//柔性数组,也可以写成 int arr[0];'
}; ' //注意:sizeof(struct S)不计算柔性数组的大小。且柔性数组必须放在结构体的末尾,而且前面有其他元素。'
int main()
{
'//要想使用柔性数组,则需要使用malloc为柔性数组所在结构体开辟空间'
struct S* ps = malloc(sizeof(struct S) + 5 * sizeof(int));
if (ps == NULL)
exit(1);
for (int i = 0; i < 5; i++)
{
ps->arr[i] = i;
}
struct S* ptr = realloc(ps, sizeof(struct S) + 10 * sizeof(int));
if (ptr != NULL)
ps = ptr;
for (int i = 0; i < 10; i++)
{
ps->arr[i] = 2 * i;
}
free(ps);
ps = NULL;
return 0;
}
'如果使用一个结构体指针来实现类似柔性数组的功能,则需要malloc两次,且开辟的内存可能是不连续的。'
|